我正在尝试自动化FFmpeg以将给定目录中的所有视频文件重新转换为MKV.我正在使用
ffmpeg -i $INPUT -c copy $OUTPUT.mkv
Run Code Online (Sandbox Code Playgroud)
但是,有些流会以这种方式跳过 - 例如,如果有2个音频流,则只有1个进入输出文件.
如何指定必须将输入中的所有流复制到输出?
因为我正在尝试自动化FFmpeg,所以最好不要为每个文件更改命令,即手动指定所有流-map将要求我首先解析每个文件.如果我需要的话,我会这样做,但如果有更好的解决方案我会更喜欢.
slh*_*hck 16
如何指定必须将输入中的所有流复制到输出?
该-map选项可以使用快捷方式执行此操作-map 0.
例如:
ffmpeg -i input.mkv -c copy -map 0:0 -map 0:2 output.mkv
Run Code Online (Sandbox Code Playgroud)
将流0:0和0:2复制到output.mkv.
ffmpeg -i input.mkv -c copy -map 0 output.mkv
Run Code Online (Sandbox Code Playgroud)
将所有输入流从输入0(input.mkv)复制到输出(即使有多个视频,音频或字幕流).
该-map值对应于输入数字(0是第一个输入,1是第二个输入等):如果您添加一个额外的输入( - >输入1),并且还想要复制所有内容,那么您将需要添加-map 1.
您可以使用它ffprobe来分析文件并查看哪个流映射到哪里.-fflags +genpts如果您收到unknown timestamp错误,请尝试 有关详细教程,请参阅选项上的FFmpeg Wiki页面-map.