ffmpeg合并拼接mp4

从事音视频相关工作,特别是点播业务的研发同学,经常会遇到视频合并的问题。

今天自己就遇到了一个,将录制产生的多个mp4视频文件合并成一个大的mp4文件。

怎么操作才能满足这个需求呢?

搜索的话,网上有很多ffmpeg合并的方法,但是针对mp4的可行性并方法不多,因为mp4文件有很多限制,比如不能直接拼接。

通过实验,本人发现可行的方法有两种,接下来通过实例分别介绍一下这两种方法。

假设,需要将a.mp4,b.mp4,c.mp4三个视频文件合并成一个merge.mp4文件。

方法一、一步到位(利用转码特性)

直接利用ffmpeg的转码功能,生成需要的mp4文件。

优点:命令简单,方便快捷。

缺点:因为存在转码过程,所以比较耗时。

一行命令解决问题:

ffmpeg -f concat -i list.txt -c copy merge.mp4 // 是不是很简单?注意list.txt文件

其中list.txt文件内容如下:

file a.mp4
file b.mp4
file c.mp4

方法 二、借鸡生蛋(利用ts格式中转)

利用转封装ts格式的质量无损的特性,为合并成mp4文件做准备。

优点:耗时短,时效性好。

缺点:过程繁琐,逻辑复杂。

1)先子片段mp4文件转成ts文件

./ffmpeg -i a.mp4 -c copy -vbsf h264_mp4toannexb a.ts
./ffmpeg -i b.mp4 -c copy -vbsf h264_mp4toannexb b.ts
./ffmpeg -i c.mp4 -c copy -vbsf h264_mp4toannexb c.ts

2)将ts文件合并成mp4文件

./ffmpeg -i 'concat:a.ts|b.ts|c.ts' -c copy -absf aac_adtstoasc merge.mp4

综合上述干货所得,个人比较推荐第二种方法,性能消耗小,特别是遇到大文件合并拼接时,时间太久,体验会很差。欢迎留言讨论。

猜你喜欢

转载自blog.csdn.net/liuzehn/article/details/105980926