/ 开发笔记

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这篇文章,里面总结各种坑,在实验过程中为我节省了大量的时间,虽然最终的方案跟此篇文章有些出入,但是依然要对对作者表示感谢。