使用 ffmpeg 如何在 MKV 中复制视频和多个字幕流并将多个音频流重新编码为 AC3?

Jas*_*ray 4 audio video ffmpeg

我有一个 MKV 格式的视频文件。我喜欢视频的质量,但我不喜欢 FLAC 格式的音频,因为我认为它占用太多空间。

它是一个双音频文件——它是一个带有日语和英语音频的动画——里面还有几个字幕流。

这是我使用的命令:

ffmpeg -i "01.mkv" -c:v copy -c:a ac3 -c:s copy "test.mkv"
Run Code Online (Sandbox Code Playgroud)

但是它只获取第一个音频和第一个字幕字符串。我需要有关多个流的地图选项的帮助。

Mat*_*oha 19

-map 0在输入后面添加,其中包括所有类型的所有流:

ffmpeg -i "01.mkv" -map 0 -c:v copy -c:a ac3 -c:s copy "test.mkv"
Run Code Online (Sandbox Code Playgroud)

您还可以告诉map命令仅包含某些流类型

-map 0:a将复制所有音频流并-map 0:a:1仅复制第一个音频流。

如果您的输入可能有也可能没有该类型的流,请?在末尾附加(即-map 0:a?)。

类型 火柴
v 视频
V 视频(附加图片、视频缩略图、封面除外)
A 声音的
s 字幕
d 数据
t 附件


Mok*_*bai 8

我相信您需要指定音频和字幕流的映射,以确保所有这些都被复制而不是第一个。为此,您需要-map 0:a? -map 0:s? -map 0:v-c:v

这应该使您的命令

ffmpeg -i "01.mkv" -map 0:a? -map 0:s? -map 0:v -c:v copy -c:a ac3 -c:s copy "test.mkv"
Run Code Online (Sandbox Code Playgroud)

map 命令用于告诉它您肯定希望将这些内容拉到输出中。-map 0:a:1将指定仅复制音频流编号 1,而-map 0:a?应有效地通配它并将它们全部复制。

  • `-map x?` 形式的映射表达式告诉 ffmpeg 选择所有与 x 匹配的流,但如果没有找到匹配的流,则不会抛出错误。只需`-map x` 将选择所有匹配的流。 (4认同)