1、導言
參考 微岩 博客 FFmpeg視頻精准剪切
ffmepg剪切視頻,很方便,但是也有很大缺陷:
- (1) 剪切時間點不精確
- (2)有時剪切的視頻開頭有黑屏
造成這些問題的原因是ffmpeg無法seek到非關鍵幀上。
以下本文通過一些參數配置盡可能地減輕以上問題
2、基本剪切方法
ffmpeg -i test.mp4 -ss 10 -t 15 -codec copy cut.mp4
參數分析:
-i : source
-ss:start time
-t :duration
-c :video,audio codec
時間格式:
- x秒
- HOURS:MM:SS.MICROSECONDS
可以設置輸出視頻的編碼格式
-vcodec xxx
-acodec xxx
把-ss, -t參數放在-i參數之后,是對輸出文件執行的seek操作
輸入文件會逐幀解碼,直到-ss設置的時間點為止,這么操作會很慢,雖然時間點是准確的,但是很容易出現黑屏問題。
3、參數優化
(1)將-ss, -t 參數放在-i參數之前
ffmpeg -ss 10 -t 15 -i test.mp4 -codec copy cut.mp4
對輸入文件執行seek操作,會seek到-ss設置的時間點前面的關鍵幀上。
時間不精確,但是不會出現黑屏
(2)accurate_seek
剪切時間更加精確
ffmpeg -ss 10 -t 15 -accurate_seek -i test.mp4 -codec copy cut.mp4
PS:accurate_seek必須放在-i參數之前
(3)avoid_negative_ts
如果編碼格式采用的copy 最好加上 -avoid_negative_ts 1參數
ffmpeg -ss 10 -t 15 -accurate_seek -i test.mp4 -codec copy -avoid_negative_ts 1 cut.mp4
4、最終方案
D:\Program Files\ffmpeg\bin\ffmpeg.exe -y -i D:/VideoRec/222.mp4 -ss 1:51 -to 2:16 -c:a copy -vcodec libx264 -keyint_min 2 -g 1 -y D:\VideoRec\20210209165300.mp4
ffmpeg -y -i 源文件 -ss 開始時間點 -to 結束時間點 -c:a copy -vcodec libx264 -keyint_min 2 -g 1 -y 生成的文件