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 Documentationhttps://ffmpeg.org/ffmpeg.html#Advanced-options
ffmpeg Documentationhttps://ffmpeg.org/ffmpeg.html#Stream-copy
ffmpeg Documentationhttps://ffmpeg.org/ffmpeg.html#Stream-selection
ffmpeg Documentationhttps://ffmpeg.org/ffmpeg.html#Automatic-stream-selection