1、工作要使用ffmpeg将视频转换成H264格式,网上查到的很多使用方法都是如下:
ffmpeg -i input.mov -c:v libx264 -crf 12 output.mov
-i后面表示输入的视频流;
-c:v后面表示要转换的格式;
-crf表示视频的压缩程度,数字越大压缩程度越大,输出的视频也就越小,默认是18;
但是这样转出来的视频暂停之后快进会有延迟,造成画面卡顿的感觉,而且按帧播放不流畅;
google了很多资料才知道,这是因为关键帧之间缺少控制,需要加上下面两个参数:
-g 2 -keyint_min 2
因此完整的命令如下:
ffmpeg -i input.mov -c:v libx264 -g 2 -keyint_min 2 -crf 12 output.mov
2、替换视频中的某一帧
业务中有一个功能:需要实现将视频中的一帧替换为用户上传的图片,但ffmpeg并没有实现这个功能的参数,
后来想到只要图片尺寸与视频一样大,那就可以用加水印的方式实现,如将视频第三帧替换为输入图片,整理后的命令如下:
ffmpeg -i input.mov -i input.jpg -filter_complex "[0:v][1:v]overlay=enable='between(n,2,2)'" -acodec copy output.mp4
-i input.mov 输入的视频流;
-i input.jpg 输入的图片;
-filter_complex 是最关键的,但是具体什么意思我现在也忘了;
"[0:v][1:v]overlay=enable='between(n,2,2)'" 这里的冒号一定不能少,括号中的两个数字表示第几帧到第几帧,从0计数,使用是直接替换数字就可以了;
-acodec copy 表示拷贝音频;