如果源具有"eng"作为音轨,请使用该音轨,否则使用默认音轨还是音轨零?
这可能吗?
我试过:
-map 0:m:language:eng? -map 0:a:0?
但最终总是使用默认值。
好问题。我认为ffmpeg没有这个功能,所以我最终写了一个.bat脚本来模仿它。该脚本使用ffprobe
来探测媒体文件。对于每个流,如果有一个语言属性集和该语言!="eng",省略它。否则,映射所有没有语言的流+那些有"eng"语言的流,并复制到basename-fixed.ext.
它可能比应该的更复杂,但你可能会发现它很有用*耸耸肩*
@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
)