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

Printed on: April 24, 2024 at 20:04 o'clock

Member: rubberman
Solution rubberman Mar 22, 2017 updated at 21:32:18 (UTC)
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
Member: Spider.Mann
Spider.Mann Mar 23, 2017 updated at 14:31:27 (UTC)
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?
Member: Spider.Mann
Spider.Mann Mar 23, 2017 at 14:59:18 (UTC)
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
Member: rubberman
rubberman Mar 23, 2017 at 18:11:32 (UTC)
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