FFmpeg 视频拼接的案例分析

本文介绍了使用FFmpeg进行视频拼接的三种方法,包括使用ffmpeg分离器、concat协议和concat滤镜。针对拼接后可能出现的花屏、时基不一致、播放异常等问题,分析了原因并提出了解决方案,如确保编码格式、时基和采样率一致,以及转换为TS格式。最后,强调了解码过程中I帧、P帧、B帧的重要性以及DTS和PTS在时间协调中的作用。
摘要由CSDN通过智能技术生成

海外业务有视频拼接的需求,简单的说就是将两个视频拼接在一起形成新的视频(原视频+EC视频)。

调研后发现,视频拼接有如下方式:

1、单独使用ffmpeg的分离器:

concat (解码分离器之一,总概念是:demuxer)

(具体可以前往Wiki查看基础介绍篇:FFmpeg 音视频处理涉及的基础概念梳理。)

把所有要拼接的视频报存到一个文件中,然后利用ffmpeg的插件concat进行拼接。

方式如下:mylist.txt

file '/xxx/a.mp4'file '/xxx/b.mp4'

然后使用如下命令:

ffmpeg -f concat -i mylist.txt -c copy c.mp4

这种方式拼接速度最快,因为不涉及编码和解码,几乎只有文件的磁盘io操作。

然而,可以很负责任的告诉你,结果会出现问题:

  1. 文件时长不对!

对于文件时长出错的问题,可以换一种方式解决:先把ab视频转为ts格式,然后再同样进行拼接操作。

方式:

ffmpeg -i '/xxx/a.mp4' -codec copy -bsf:v h264_mp4toannexb '/xxx/a.ts'  ffmpeg -i '/xxx/b.mp4' -codec copy -bsf:v h264_mp4toannexb '/xxx/b.ts'ffmpeg -f concat -i mylist.txt -c copy c.mp4
#-bsf 是比特流过滤器选项 查看其他用:
ffmpeg -bsfs
#官方推荐mp4转ts的时候 带上这个参数
-bsf:v h264_mp4toannexb #https://ffmpeg.org/ffmpeg-bitstream-filters.html

依样画葫芦,把 a.ts和b.ts都按前面的方式写入mylist.txt ,然后执行上面一样的命令。

然而,亲试结果依然会出现问题:

  1. 播放到衔接处花屏 (Quicktime 播放器)

此处出现一个新的概念:TS格式 这里简单的认识就是传输流(transport stream)格式

2、使用concat协议

方式:

ffmpeg -i "concat:/xxx/a.ts|/xxx/b.ts" -c copy c.mp4

注意这种方式是使用协议,作用层面也是在文件层,也不会导致编码和解码,所以速度也是很快。

然而,可以很负责任的告诉你, 结果依然很容易出现可能的问题:

  1. 播放到衔接处花屏 ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值