2016-04-09 3 views

Antwort

0

Gute Frage. Ich glaube nicht, dass ffmpeg diese Funktion hat, also schrieb ich ein .bat-Skript, um es nachzuahmen. Das Skript verwendet ffprobe, um die Mediendatei zu prüfen. Für jeden Stream, wenn ein Sprachattribut gesetzt ist und diese Sprache! = "Eng", weglassen. Andernfalls mappen Sie alle Streams ohne Sprache und solche mit der Sprache "eng" und kopieren Sie sie in basename-fixed.ext.

Es ist wahrscheinlich komplizierter als es sein sollte, aber Sie könnten es nützlich finden. * Achselzucken *

@echo off 

for %%I in (*.mkv *.mp4) do (
    setlocal 
    for /f "delims=" %%x in (
     'ffprobe -v quiet -show_entries "stream=codec_name:stream_tags=language" -of flat "%%~I"' 
    ) do set "%%~x" 
    for /f "tokens=1* delims==" %%a in ('set streams') do (
     echo(%%a | find /i "language" >NUL && if /i not "%%~b"=="eng" (
      for /f "tokens=1-3 delims=." %%p in ("%%a") do (
       for /f "tokens=1 delims==" %%s in ('set %%p.%%q.%%r') do set "%%~s=" 
      ) 
     ) 
    ) 

    setlocal enabledelayedexpansion 
    for /f "tokens=3 delims=." %%x in ('set streams ^| find "codec_name"') do (
     if not defined map (
      set "map=-map 0:%%x" 
     ) else set "map=!map! -map 0:%%x" 
    ) 
    echo ffmpeg -i "%%~I" !map! -c:v copy -c:a copy -c:s copy "%%~nI-fixed%%~xI" 
    ffmpeg -i "%%~I" !map! -c:v copy -c:a copy -c:s copy "%%~nI-fixed%%~xI" 
    endlocal 
    endlocal 
) 
+0

Ja, leider ffprobe eine zusätzliche Verzögerung ist zuerst die Informationen zu erhalten. ffmpeg muss der schlechteste Code sein, den ich jemals gesehen habe und der schlimmste api aller Zeiten. – momomo