FFmpeg流拼接滤镜concat原理与使用注意事项

本文出处:http://blog.csdn.net/chaijunkun/article/details/116237809,转载请注明。由于本人不定期会整理相关博文,会对相应内容作出完善。因此强烈建议在原始出处查看此文。

输入流拆分合并原理

对于新手来说,concat滤镜的三个参数:n、v、a会让人抓不住头脑,其实在官方文档中有这么一句话,描述得已经非常准确了:

There are nx(v+a) inputs: first the inputs for the first segment,
in the same order as the outputs,
then the inputs for the second segment, etc.

下面详细介绍滤镜拆分流的工作原理。

首先要说明的是,concat滤镜先处理视频流,后处理音频流。

一个官方的例子来解释:

ffmpeg -i opening.mkv -i episode.mkv -i ending.mkv -filter_complex \
  '[0:0] [0:1] [0:2] [1:0] [1:1] [1:2] [2:0] [2:1] [2:2]
   concat=n=3:v=1:a=2 [v] [a1] [a2]' \
  -map '[v]' -map '[a1]' -map '[a2]' output.mkv

在上述命令中,输入源有3个,每个输入源都有1个视频流和2个音频流(可以想象为影视剧的两种语言对白);

concat滤镜指定了视频流有1个,因此先选出视频流[0:0];
而后指定了音频流有2个,因此后面的[0:1]、[0:2]被选出;
接下来再看n,上述命令配置为3,意味着有3个片段。则输入流应当有3*(1+2)个流,也就是9个流,并且按照出现的先后顺序进行拼接。

即:

(([0:0])([0:1],[0:2])) + (([1:0])([1:1],[1:2])) + (([2:0])([2:1],[2:2]))

==>
[0:0] + [1:0] + [2:0] => [v]
[0:1] + [1:1] + [2:1] => [a1]
[0:2] + [1:2] + [2:2] => [a2]

需要注意的是,使用一次concat滤镜同时处理音频流和视频流时,两个(或者多个)输入源一定要保证拼接的音视频流数量相等。
并且输入的流顺序要严格按照上述规则,不能音视频流顺序颠倒,例如:

[0:v][0:a][1:a][1:v]concat=n=2:v=1:a=1[v][a]

上述命令中第二个输入源的音视频流颠倒了,这样滤镜就会认为是

[0:v] + [1:a]

而这两个流的类型不一样,就会报错:

Stream specifier ':a' in filtergraph description [0:v][0:a][1:a][1:v]concat=n=2:v=1:a=1[v][a] matches no streams

当然回到最开始的官方例子,每个输入源有2个音频流,音频流的顺序可以调换吗?例如:

[0:1][0:2][1:2][1:1]concat=n=2:v=0:a=2[a1][a2]

如果音频参数完全一致,是可以正常运行的,但,这真的是你想要的效果吗?类似于开头是英文对白,后面突然变成了中文对白。

拼接流有哪些先决条件

虽然视频、音频流都可以进行拼接,但真正进入滤镜前要保证满足一些先决条件,否则会发生错误。

视频流拼接的先决条件

  1. 画面大小一致
  2. SAR、DAR一致
  3. 帧率一致
  4. 时间基一致

音频流拼接的先决条件

  1. 采样率一致
  2. 时间基一致
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ffmpegconcat命令用于将多个音视频文件合并为一个文件。以下是一个示例命令: ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex '[0:0 [0:1 [1:0 [1:1 [2:0 [2:1 concat=n=3:v=1:a=1 [v [a]' -map '[v]' -map '[a]' output.mp4 在这个命令中,我们使用了三个输入文件1.mp4,2.mp4,3.mp4,分别指定了各个文件的音频和视频。过滤器复杂部分的参数'[0:0 [0:1 [1:0 [1:1 [2:0 [2:1 concat=n=3:v=1:a=1 [v [a]'指定了合并的规则,具体的含义是将三个输入文件的视频和音频按顺序合并,最终生成一个视频和一个音频。最后,我们使用-map参数指定了输出文件的视频和音频,并将结果保存为output.mp4文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ffmpeg拼接视频方法concat详解](https://blog.csdn.net/sinat_14826983/article/details/82597272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [FFmpeg拼接滤镜concat原理使用注意事项](https://blog.csdn.net/chaijunkun/article/details/116237809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值