我正在尝试自动化FFmpeg以将给定目录中的所有视频文件重新转移到MKV。我正在使用
ffmpeg -i $INPUT -c copy $OUTPUT.mkv
但是,有些流会以这种方式跳过 - 例如,如果有2个音频流,则只有1个流进入输出文件。
如何指定输入中的所有流必须复制到输出?
由于我正在尝试自动化FFmpeg,最好不要为每个文件更改命令,即手动指定所有带-map
的流将要求我首先解析每个文件。如果我需要,我会这样做,但如果有更好的解决方案,我宁愿这样做。
答案 0 :(得分:16)
如何指定必须将输入中的所有流复制到输出?
-map
选项可以使用快捷键-map 0
。
例如:
ffmpeg -i input.mkv -c copy -map 0:0 -map 0:2 output.mkv
将流0:0和0:2复制到output.mkv。
ffmpeg -i input.mkv -c copy -map 0 output.mkv
将所有输入流从输入0(input.mkv
)复制到输出(即使有多个视频,音频或字幕流)。
-map
值对应输入数字(0
是第一个输入,1
是第二个输入,等等):如果添加其他输入( - >输入1),并且还想复制所有内容,然后您需要添加-map 1
。
您可以使用ffprobe
分析文件,并查看哪个流映射到哪里。如果收到-fflags +genpts
错误,请尝试unknown timestamp
。有关详细教程,请参阅the FFmpeg Wiki page on the -map
option。