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 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

Map – FFmpeghttps://trac.ffmpeg.org/wiki/Map

ffmpeg命令行map参数的使用_路儿的博客-CSDN博客_ffmpeg map介绍理解-map参数的最好办法就是想像一下怎么去告诉ffmpeg你要从源文件中选择/拷贝哪个流到输出文件。输出文件的stream顺序取决于在命令行中-map的参数顺序。下面有一些例子。默认默认操作(没有指定map参数),比如:ffmpeg -i INPUT OUTPUT本质上,是从所有输入中发现“最高质量”(单个)视频输入流和“最高质量”(单个)音频输入流,并“发送”到O...https://blog.csdn.net/xiaoluer/article/details/81136478

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戴国进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值