spider.mann
Goto Top

In einer Matroska-Datei eine Audio-Spur suchen

Hallo,

ich habe mehrere Matroska-Dateien mit jeweils einer Videospur und drei Audiospuren und ich möchte in einem Script feststellen welches jeweils die deutsche Audiospur ist.

Ich benutze dazu die CLI-Version von MediaInfo v0.7.92.1.

mediainfo --Inform=Audio;:%ID%.%Language%: "input.mkv"  

liefert mir :2.de::3.en::4.en:

die Doppelpunkte trennen die einzelnen Spuren
und die Punkte trennen Spur-ID und Sprache

Bisher habe ich mir folgendes Überlegt:
for %%i in ( *.mkv ) do (

    for /f "tokens=1-3 delims=:" %%j in ( '"mediainfo --Inform=Audio;:%%ID%%.%%Language%%: "%%i""' ) do (  
        liefert mir als Output für die jeweilige Datei z.B: 
        in Variable j: 2.de
        in Variable k: 3.en
        in Variable l: 4.en
        und die Punkte trennen Spur-ID und Sprache
    )

)

Wie kann ich jetzt in den drei Variablen nach dem "de" suchen und die Zahl davor in einer Variablen speichern?

Content-Key: 332924

Url: https://administrator.de/contentid/332924

Ausgedruckt am: 29.03.2024 um 08:03 Uhr

Mitglied: rubberman
Lösung rubberman 22.03.2017 aktualisiert um 22:32:18 Uhr
Goto Top
Hallo Spider.Mann

Eine Option statt der Doppelpunkte einen Zeilenumbruch zu schreiben gibt's nicht zufällig?

Ansonsten:
for %%i in (*.mkv) do (
    for /f "tokens=1-3 delims=:" %%j in ( '"mediainfo --Inform=Audio;:%%ID%%.%%Language%%: "%%i""' ) do (  
        for /f "tokens=1,2 delims=." %%m in ("%%j") do if "%%n"=="de" set "id=%%m"  
        for /f "tokens=1,2 delims=." %%m in ("%%k") do if "%%n"=="de" set "id=%%m"  
        for /f "tokens=1,2 delims=." %%m in ("%%l") do if "%%n"=="de" set "id=%%m"  
    )
    set "file=%%i"  
    setlocal EnableDelayedExpansion
    echo !id! !file!
    endlocal
)
Grüße
rubberman
Mitglied: Spider.Mann
Spider.Mann 23.03.2017 aktualisiert um 15:31:27 Uhr
Goto Top
Erstmal vielen Dank für deine Antwort.

Doch gibt es:
mediainfo --Inform=Audio;%ID%.%Language%\r\n "input.mkv"  
liefert mir folgendes:
2.de
3.en
4.en

Und wie hilft mir das weiter?
Mitglied: Spider.Mann
Spider.Mann 23.03.2017 um 15:59:18 Uhr
Goto Top
Habe die Lösung gefunden.

@echo off
for %%i in (*.mkv) do (
    setlocal EnableDelayedExpansion
    for /f %%j in ( '"mediainfo --Inform=Audio;%%ID%%.%%Language%%\r\n "%%i""' ) do (  
        for /f "tokens=1,2 delims=." %%m in ( "%%j" ) do if "%%n"=="de" set id=%%m  
    )
    echo !id! %%i
    endlocal
)

@rubberman: Vielen Dank für deine Hilfe.

MfG
Spider.Mann
Mitglied: rubberman
rubberman 23.03.2017 um 19:11:32 Uhr
Goto Top
Der Grund für die Hilfsvariable file und dass ich die verzögerte Variablenerweiterung nur für die Ausgabe eingeschaltet habe, ist, dass Batch sonst bei Dateinamen mit Ausrufezeichen rumzickt. Falls du solche Namen ausschließen kannst, kannst du das
setlocal EnableDelayedExpansion
auch vor die äußere Schleife setzen und das
endlocal
danach. Spart ein bisschen Zeit, ist aber eben auch etwas gefährlicher.

Grüße
rubberman