使用FFmpeg实现精确剪切视频

基本的剪切命令:

用 -ss 和 -t 选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:

  1. ffmpeg -i input.wmv -ss 00:00:30.0 -c copy -t 00:00:10.0 -codec copy output.wmv

  2. ffmpeg -i input.wmv -ss 30 -c copy -t 10  -codec copy output.wmv

达成相同效果,也可以用 -ss 和 -to 选项,

ffmpeg -i input.wmv -ss 30 -c copy -to 40 -codec copy  output.wmv

但是这样剪切的视频不精准,剪切的位置会有重复的地方

根据网上资料,加入了-accurate_seek参数在-i前面和-avoid_negative_ts 1参数

ffmpeg -ss {0} -to {1} -accurate_seek -i {2}  -codec copy  -avoid_negative_ts 1  -y {3}

结果是视频头部的剪裁精度基本满意但是尾部还是不准,第二段向前偏离了5s,这样肯定是不行的

如何实现剪切的位置,前后两端都很精确,经过查找后,有以下三种方式可行:

第一种:在剪切前调整视频关键帧的位置,再去剪切,

关键参数 : -g 1 -keyint_min 2 

例子:

ffmpeg -y -i 美丽的神话.mp4 -ss 0 -t 295 -c:a copy -vcodec libx264 -keyint_min 2 -g 1  -y 11.mp4

第二种:经过查阅资料,发现ffmpeg在进行转码的时候会自动精准时间,即不使用-codec copy编码,所以我们可以在剪切时,进行编码输出

-ss {0} -to {1} -accurate_seek -i {2} -c:v libx264  -avoid_negative_ts 1  -y {3}

第三种:据说OpenCV截取的视频是极为精准的但是没有声音,那么就用OpenCV截取视频,ffmpeg截取音频,然后合并音频和视频

使用OpenCV的VideoWriter.write写入视频

对视频压缩为音频

ffmpeg -y -I filename -vn -ar 44100 -ac  -ab 192 -f mp3

然后切割音频

ffmpeg -y -vn -ss start -t duration -i filenam -acodec copy

最后合并音频视频

ffmpeg -y -i filename -i filename2 -vcode copy -acodec copy

不过本人并未尝试,记录下,以备不时之需!

参考资料:FFmpeg精准时间切割视频文件 - 知乎

FFMPEG剪辑大法 - 哔哩哔哩

猜你喜欢

转载自blog.csdn.net/yunxiaobaobei/article/details/106529585