是否有方法映射0:m:language:eng(如果存在),否则使用默认值



如果源具有"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
)

相关内容

  • 没有找到相关文章

最新更新