Ergebnis 1 bis 4 von 4

Thema: Streamdaten extrahieren: Mit Mediainfo CLI und AWK zur kostenlosen Eigenbaulösung

  1. #1
    ROT-26-Spezialist Avatar von Cannonau
    Registriert
    Mar 2015
    Beiträge
    276
    Gefällt mir!
    124
    Du gefällst: 288

    Streamdaten extrahieren: Mit Mediainfo CLI und AWK zur kostenlosen Eigenbaulösung

    Als Film- oder Serienfan steht man oft vor dem Problem, daß man Daten aus der Mediendatei braucht, am besten automatisiert und formatiert. Leider fehlt häufiger die NFO oder sie ist fehlerhaft, außerdem ist es m.E. müßig, für jede Releasegroup einen Parser zu bauen - also liegt der Gedanke nahe, die Infos aus den technischen Infos der Datei selbst zu holen.

    "Geht nur mit viel Copy & Paste" rufen die Einen. "Da wirste um Powershell, phpCLI oder Python nicht herumkommen." schüren Andere die Codingphobie des Anfängers.

    Ich habe mir die Aufgabe gestellt, eine möglichst einfache, kostenlose Lösung zu bauen, die weitgehend in einer einfachen, plattformübergreifenden Sprache geschrieben ist. Die Wahl fiel auf (Windows-)Batch und AWK, total oldschool, macht die Lösung aber auch sowas von sexy!

    Da der Batchteil eher von untergeordneter Bedeutung ist (er ist nur so groß, weil Windows Batch teils sehr umständlich zu handhaben ist), gehe ich davon aus, daß auch ein nur halbwegs fitter bash-Coder die paar erforderlichen Schnipsel selbst hinkriegt.

    Was wird gebraucht?

    1. Mediainfo CLI ---> MediaInfo - Download
    2. Datentemplate für 1. (hängt hier an)
    3. GAWK aus den GnuWin32-Tools. Bei Linux gehört es in der Regel zur Grundaustattung, für Windows gibt's GnuWin32
    4. Einen brauchbaren Texteditor, der auch die AWK-Syntax kennt. Z.B. jEdit - Programmer's Text Editor - overview
    5. Grundkenntnisse in Batch; gerade bei MS-Betriebssystem die absolute Pest. Das hier ist kein Batch-Kurs, der Batchcode, der gebraucht wird, wird beipielhaft als Schnipsel gezeigt, sollte aus MS-Betriebssystemen ab Vista laufen, getestet habe ich ihn unter Server 2012R2 und 7. Variablen usw. habe ich im Beispiel weitgehend entfernt, das macht es für den Anfang lesbarer.
    6. Demodatei test_tmpl, das ist ein einfaches Basistemplate zu Demozwecken
    7. AWK-Script GenMETA_awk, das Herzstück, findet Ihr als Anhang beigefügt.

    Der verwendete AWK-Code ist unter Version 3.x geschrieben und sollte z.B. auch unter Cygwin mit neueren AWK-Versionen problemlos laufen. Die Aufruf-Parameter aus den Batch-Schnipseln sind wichtig!

    Los geht's. Das Beispiel behandelt direkt eine Gruppe von Dateien, wie man sie z.B. bei Serien vorliegen hat.
    Code:
    call :GET_NFO !_num! :: _num ist ein Dateizähler
    
    
    :GET_NFO:
    IF EXIST "*.nfo" copy /y "*.nfo" "C:\testbed\NFO\"
    for /R %%M IN (*.mkv) DO "C:\mediainfo\mediainfo.exe" --LogFile="C:\testbed\NFO\%1-medinf.txt" --Inform="C:\mediainfo\medinf_template.txt" "%%M"
    Der Schnipsel erzeugt in C:\testbed\NFO\ durchnumerierte Dateien, die den Mediainfo-CLI-Output enthalten. Er kopiert auch die NFOs in diesen Ordner. Im folgenden Schritt übergeben wir diese Dateien an GAWK:

    Code:
    Setlocal EnableDelayedExpansion
    set _mediainfoNO=2 :: Daten aus der zweiten Mediainfo-Datei und NFO verwenden; empfehlenswert bei Serien
    PUSHd "C:\testbed\NFO\"
    for %%M in (*-medinf.txt) do	(
    	set /a _medinfcount += 1
    	set _awkload=!_awkload! "%%M"
    								)
    for %%N in (*.nfo) do	(
    set /a _nfocount += 1
    if !_nfocount! EQU !_mediainfoNO! (set _nfofile=%%N)
    						)
    set _nfofile=!_nfofile:\=/!
    awk -W re-interval -f "C:\Scripts\GenMETA_awk" -v _tmplfile=C:/Scripts/test.tmpl -v _nfofile="!_nfofile!" -v _mediainfoNO=!_mediainfoNO! !_awkload! > "..\RESULT.txt"
    Endlocal
    POPd
    Die Ausgabe wird im Verzeichnisbaum eine Ebene über dem NFO-Ordner geschrieben, also C:\testbed\.

    Nun zum AWK-Script: es liest Anzahl der Audio-Streams und jeweils Bitrate, Kanalzahl und Sprache (sofern vom Releaser gepflegt) sowie Dateigrößen (einzeln), Kapitelinfos und Abspielzeiten aus. Einen Fallback für den Fall, daß die Sprachen nicht gepflegt sind, gibt es auch (Zeile 122, ggfs. nach eigenem Geschmack anpassen). Danach fügt es diese bzw. daraus abgeleitete Infos nebst NFO-Text und Mediainfo-Rohdaten der mit _mediainfo bestimmten Datei in das Demo-Template ein. Das Ergebnis findet Ihr in C:\testbed\RESULT.txt.

    Die erzeugte Datei kann man dann weiter verarbeiten. Als Template sind z.B. XML-Strukturen wie für Intelligen oder auch ein fertiges Posting, das man automatisch an Tools wie Themaposter senden kann, denkbar.

    Der besondere Charme dieser Lösung ist, daß man reale Spielzeiten ausgegeben bekommt, daran kann man z.B. festmachen, ob es sich um eine Uncut-Version oder eine Mogelpackung handelt. Man kann diese Zeit z.B. mit Infos auf OFDB vergleichen ... und, und, und ... ich jedenfalls bevorzuge diese Methode gegenüber allem, was in NFOs steht.

    Ich hoffe, die Lösung animiert den Einen oder Anderen hier, sie auszuprobieren, sich Arbeit zu sparen und sie vielleicht sogar anzupassen oder zu erweitern - AWK ist nicht nur plattformübergreifend einsetzbar und winzig, es ist ziemlich leicht zu lernen, bietet assoziative Arrays und animiert zur Auseinandersetzung mit regulären Ausdrücken.

    Das Skript ist sparsam kommentiert, aber sauber gegliedert und alle Funktionen und Variablen aus meiner Sicht deskriptiv benannt. Wer Fragen oder Anmerkungen hat, nur zu.

    Bei Lesebedarf zu AWK helfen:

    [ awk-Tutorium: Vorwort ]
    https://www.gnu.org/software/gawk/manual/

    Weitere Links gerne bei Bedarf.

    Cannonau
    Angehängte Dateien Angehängte Dateien
    Geändert von Cannonau (21.03.2016 um 16:40 Uhr)

  2. Diesen Mitgliedern gefällt dieser Beitrag:


  3. #2
    Senior
    Registriert
    Mar 2015
    Beiträge
    152
    Gefällt mir!
    312
    Du gefällst: 59
    Also ich mach dies einfach so:

    Code:
    @echo off
    set mediainfo="C:\Users\Administrator\Downloads\Downloads\MediaInfo_CLI_0.7.74_Windows_x64\MediaInfo.exe"
    
    for %%a in ("*.mkv") do (
    "%mediainfo%" "%%~na.mkv" --LogFile="%%~na.txt"
    Type "%%~na.txt" | findstr /v "Complete Name" | findstr /v "Unique" > "%%~na.nfo"
    del "%%~na.txt"
    more +6 "%%~na.nfo" > "%%~na.nfo.new"
    move /y "%%~na.nfo.new" "%%~na.nfo" )
    del *.bat
    exit
    Wenn ich die Batch dann in den Ordner kopiere und auführe, erstellt er mir für jede Datei eine mediainfo.
    Die richtige NFO der Crew kann ja behalten bleiben und zusätzlich erhällt man eine MediaInfo^^

  4. #3
    ROT-26-Spezialist
    THEMENSTARTER

    Avatar von Cannonau
    Registriert
    Mar 2015
    Beiträge
    276
    Gefällt mir!
    124
    Du gefällst: 288
    Hi Sairenji,

    das ist ja nicht alles, was meine Lösung macht, sieh' Dir das AWK-Skript mal genauer an ;-)

    Du erhältst damit einen Output wie:
    Code:
    Länge: ca. 43 Min.
    Containerinfo: mkv, Kapitelmarker
    AudioFormat: GER: DTS 6CH 768 kbps ENG: DTS 6CH 1510 kbps
    Sprache(n): GER, ENG
    Größe: pro Folge ~2,7 GiB
    
    <kompletter NFO-Text>
    
    <kompletter Mediainfo-Text>
    Soll heißen, es generiert einen Kurzinfoblock, wo man übersichtlich alle wichtigen Daten sehen kann. Die komplette Mediainfo ist zwar auch wichtig - vor allem für die Encodingfreaks - aber für normale Menschen unübersichtlich. AWK holt für mich Teilinfos aus diesen Dateien und bereitet sie auf - dafür wurde es vor fast 40 Jahren auch entwickelt. :-)

    Cannonau (kommt sich schon wieder steinalt vor ...)

  5. Diesen Mitgliedern gefällt dieser Beitrag:


  6. #4
    ROT-26-Spezialist
    THEMENSTARTER

    Avatar von Cannonau
    Registriert
    Mar 2015
    Beiträge
    276
    Gefällt mir!
    124
    Du gefällst: 288
    Ich kann den Startbeitrag leider nicht mehr editieren, kann ein Mod bitte die Dateien austauschen?

    In Genmeta_AWK war ein Bug in der Spracherkennung, mit diesem Release gefixt.

    Cannonau
    Angehängte Dateien Angehängte Dateien

Ähnliche Themen

  1. Welche kostenlosen anonymen eMail-Anbieter gibt es ?
    Von Fusi0nSzene im Forum Mainstream Talk & OffTopic
    Antworten: 6
    Letzter Beitrag: 16.09.2015, 14:40

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
SzeneBox.org... im Mittelpunkt der Szene!
© since 2015 szeneBOX.org - All Rights Reserved
Domains: www.szenebox.org