ffmpeg -map 参数详解

1. 使用 -map 选项选择流

  • top 命令不使用任何流说明符。这是一种绝对的映射方法,无论类型如何,都会选择特定的流。
    • -map 0:0 第一个输入文件的第一个流
    • -map 1:3 第二个输入文件的第四个流
  • bottom 命令包括流说明符(v视频, a音频, s字幕, m元数据)以将流限制为特定类型。
-map 0:v:0  第一个输入文件的第一个视频流
-map 1:a:2  第二个输入文件的第三个音频流
-map 1:s:1  第二个输入文件的第二个字幕流

1.1 examples简单的例子

  • -map 0 从输入索引 #0(第一个输入)中选择所有流。
  • -map 1:a 从输入索引 #1(第二个输入)中选择所有音频流。
  • -map 3:s:4 从输入索引#3(第四个输入)选择字幕流索引#4(第五个字幕流)。
  • -map 0 -map -0:s 将从输入索引 #0(第一个输入)中选择除字幕之外的所有流。-指负映射。

1.2 behavior默认行为

如果您不使用该-map选项,则默认流选择行为将自动选择流。

  • 默认流选择不会自动选择所有流。
  • 每种类型仅选择 1 个流。例如,如果输入有 3 个视频流,它只会选择 1 个。
  • 默认流选择将根据特定标准选择流。
  • 使用该-map选项会禁用默认流选择行为,并允许您手动选择流。

2. Syntax语法

-map input_file_index:stream_type_specifier:stream_index

  • input_file_index 指的是一个输入,默认情况下将包括它的所有流。
  • stream_type_specifier (可选)是一个流说明符,它将选择限制为特定的流类型。流符包括vIDEO,aUDIO,subtitles,dATA,一个ttachments。下面的大多数示例都使用流说明符。
  • stream_index (可选)将选择一个特定的流。如果stream_type_specifier使用,则stream_indexonly 引用选定的流类型并忽略所有其他流类型。

注意:索引号从 0 开始。所以第一个输入或流是#0,第二个输入或流是#1,第三个输入或流是#2,等等。

2.1 Modifiers修饰符

  • -索引input_file_index,如-map -0:v,创建了一个负的映射。这不包括先前map已经选择的流。
  • 尾随?,例如-map 1:a?,将允许map是可选的。如果map不匹配任何流,则map将被忽略而不是失败。请注意,如果使用无效,映射仍然会失败input_file_index;例如,如果map引用不存在的输入。

2.2 Order顺序

-map order 确定输出中的流顺序。

映射按顺序应用。这在使用负映射时很有用。

3. Examples例子

提示:您可以添加-c copy到这些示例中的许多以启用流复制模式。如果您只想多路复用并避免编码,这很有用。

3.1 选择所有流

单输入:

ffmpeg -i input.avi -map 0 output.mkv

多个输入:

ffmpeg -i input0.mkv -i input1.mp4 -i input2.wav -map 0 -map 1 -map 2 output.mkv

使用流复制重新混合(无编码):

ffmpeg -i input.avi -map 0 -c copy output.mkv

3.2 特定类型的流

仅视频流

ffmpeg -i input.mp4 -map 0:v output.mp4

仅音频流

ffmpeg -i input.mp4 -map 0:a output.mp4

3.3 仅特定视频流

选择第 5 个视频流:

ffmpeg -i input.mkv -map 0:v:4 output.mp4

3.4 来自不同文件的视频和音频

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a output.mp4

3.5 除音频外的所有内容

使用负映射:

ffmpeg -i input.mp4 -map 0 -map -0:a output.mp4

3.6 特定语言

包括所有视频和所有带有西班牙语元数据的流:

ffmpeg -i input.mkv -map 0:v -map 0:m:language:spa output.mp4

见ISO名单639-1码为3个字母的语言名称。

https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes

3.7 从过滤器中选择输出

在这个例子中,过滤后的视频被命名[v],过滤后的音频被命名为[a]:

ffmpeg -i input.mp4 -i logo.png -i audio.mp3 -filter_complex “[0]scale=1280:-1[bg];[bg][1]overlay[v];[2:a]volume=-3dB[a]” -map “[v]” -map “[a]” output.mp4

您几乎可以使用任何任意名称来标记过滤器输出。

3.8 多路输出

将视频输出到video.mp4. 将音频流索引 #1(第二个音频流)输出到audio_1.mp3. 将音频流索引 #3(第四个音频流)输出到audio_3.wav

ffmpeg -i input.mkv -map 0:v video.mp4 -map 0:a:1 audio_1.mp3 -map 0:a:3 audio_3.wav

3.9 可选映射

如果流不存在, 添加尾随问号 ( ?)-map将忽略映射。

要映射视频和音频流并在不存在音频流时忽略音频映射:

ffmpeg -i input.webm -map 0:v -map 0:a? output.mkv

如果改为使用-map 0:a,并且没有音频流,ffmpeg则将失败并显示Stream map ‘0:a’ matches no streams. To ignore this, add a trailing ‘?’ to the map…

3.10 重新排序流

你的顺序-map选择决定了输出流的顺序。在这个例子中,输入文件将音频作为流#0 和视频作为流#1(这可能但不寻常)。重新定位视频的示例,使其首先列出,然后是音频:

ffmpeg -i input.mp4 -map 0:v -map 0:a -c copy output.mp4

4. See also

ffmpeg Documentation

猜你喜欢

转载自blog.csdn.net/qq_36437693/article/details/133977775
今日推荐