8

我正在尝试自动化 FFmpeg 以将给定目录中的所有视频文件重新混合到 MKV。我目前正在使用

ffmpeg -i $INPUT -c copy $OUTPUT.mkv

但是,某些流会以这种方式被跳过 - 例如,如果有 2 个音频流,则只有 1 个流到输出文件。

如何指定必须将来自输入的所有流复制到输出?

由于我正在尝试自动化 FFmpeg,因此最好不要更改每个文件的命令,即手动指定所有流-map将需要我首先解析每个文件。如果需要,我会这样做,但如果有更好的解决方案,我会更喜欢。

4

1 回答 1

20

如何指定必须将来自输入的所有流复制到输出?

-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错误,请尝试。有关详细教程,请参阅FFmpeg Wiki 页面上的-map选项

于 2013-02-24T14:25:00.033 回答