1. 使用 -map 选项选择流
1.1 examples简单的例子
1.2 behavior默认行为
2. Syntax语法
2.1 Modifiers修饰符
2.2 Order顺序
3. Examples例子
3.1 选择所有流
3.2 特定类型的流
3.3 仅特定视频流
3.4 来自不同文件的视频和音频
3.5 除音频外的所有内容
3.6 特定语言
3.7 从过滤器中选择输出
3.8 多路输出
3.9 可选映射
3.a 重新排序流
4. See also
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.a 重新排序流
你的顺序-map选择决定了输出流的顺序。在这个例子中,输入文件将音频作为流#0 和视频作为流#1(这可能但不寻常)。重新定位视频的示例,使其首先列出,然后是音频:
ffmpeg -i input.mp4 -map 0:v -map 0:a -c copy output.mp4
4. See also
https://ffmpeg.org/ffmpeg.html#Advanced-options
https://ffmpeg.org/ffmpeg.html#Stream-copy
https://ffmpeg.org/ffmpeg.html#Stream-selection
https://ffmpeg.org/ffmpeg.html#Automatic-stream-selection
https://trac.ffmpeg.org/wiki/Map