基本的剪切命令:
用 -ss
和 -t
选项, 从第 30 秒开始,向后截取 10 秒的视频,并保存:
-
ffmpeg -i -ss 00:00:30.0 -c copy -t 00:00:10.0 -codec copy
-
ffmpeg -i -ss 30 -c copy -t 10 -codec copy
达成相同效果,也可以用 -ss
和 -to
选项,
ffmpeg -i -ss 30 -c copy -to 40 -codec copy
但是这样剪切的视频不精准,剪切的位置会有重复的地方
根据网上资料,加入了-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的写入视频
对视频压缩为音频
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剪辑大法 - 哔哩哔哩