我正在尝试自动化FFmpeg将给定目录中的所有视频文件重新混流为MKV格式。我目前正在使用
ffmpeg -i $INPUT -c copy $OUTPUT.mkv
然而,这种方式会忽略一些流——例如,如果只有两个音频流,则只有一个流被输出。
如何指定要将输入中的所有流复制到输出中?
由于我正在尝试自动化FFmpeg,最好的方法是命令对每个文件不进行更改,即手动使用-map
指定所有流需要我首先解析每个文件。 如果需要,我可以这样做,但如果有更好的解决方案,我宁愿选择那个。
我正在尝试自动化FFmpeg将给定目录中的所有视频文件重新混流为MKV格式。我目前正在使用
ffmpeg -i $INPUT -c copy $OUTPUT.mkv
然而,这种方式会忽略一些流——例如,如果只有两个音频流,则只有一个流被输出。
如何指定要将输入中的所有流复制到输出中?
由于我正在尝试自动化FFmpeg,最好的方法是命令对每个文件不进行更改,即手动使用-map
指定所有流需要我首先解析每个文件。 如果需要,我可以这样做,但如果有更好的解决方案,我宁愿选择那个。
-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
。有关详细教程,请参见FFmpeg Wiki页面上的-map
选项。
ffmpeg
,那么需要知道 ffmpeg
已经不存在于Ubuntu 14.04的软件源中了。但它的分支 avconv
可以实现同样的功能(可以通过 sudo apt-get install libav-tools
命令安装)。 - JeroenHoek
$INPUT
或者input.mp4
其实并没有什么区别。只是我在这里看到过许多这样的问题被错误地关闭了,所以我宁愿在它们最终被删除之前将它们迁移走:) 不客气。 - slhck