ffmpeg合成视频笔记
一、需求
近期有一个小需求,需要将一些图片和音频合成一段视频,期间踩了写坑,特记录一下,以备后面参考
二、整合的步骤
1.将一张图片和一段mp3合成视频
ffmpeg -loop 1 -i ./1.jpg -i ./1.mp3 -absf aac_adtstoasc -s 1920*1080 -r 8 -c:v libx264 -x264-params keyint=1:scenecut=0 -c:a aac -b:a 64k -pix_fmt yuvj420p -t 20.00 ./out.mp4
- 关键参数说明:
-r 指定帧率
-t 指定视频时间 - 遇到的问题:
音视频时长不同(可以通过 mediainfo指令查看) - 原因及解决:
采用的帧率为1(图像长度以1s为单位),而音频是毫秒级
因此导致,音画的时长不一致,相差较大。解决方法,
加大帧率(弊端:增加视频尺寸,处理速度降低)
2.将多段mp4合成完整视频
$ cat video_input.txt
file '/path/to/1.mp4'
file '/path/to/2.mp4'
file '/path/to/3.mp4'
ffmpeg -safe 0 -f concat -i ./video_input.txt -ac 1 -c copy ./output.mp4;
- 关键参数说明:
-safe 0 加上此选项输入文件中可以包含绝对路径 - 遇到的问题:
报错:Unsafe file name .... - 原因及解决:
未加上safe 0参数,并且输入文件中包含了绝对路径。解决方法,在-i之前加上 -safe 0
3.将视频重整
ffmpeg -ss 0 -i ./temp.mp4 -max_muxing_queue_size 1024 -vcodec h264 -acodec aac -copyts ./realoutput.mp4;
- 关键参数说明:
-ss 0 此参数表示从视频起始点开始进行视频重编码
进行此步骤之后虽然编码方式没有改变,但是视频尺寸会小很多
具体原因尚未深究
三、总结
在做实验的过程中借鉴了https://www.jianshu.com/p/998d59afee5f这篇文章,里面总结各种坑,在实验过程中为我节省了大量的时间,虽然最终的方案跟此篇文章有些出入,但是依然要对对作者表示感谢。