利用FFmpeg切割視頻


關鍵詞:FFmpeg,seek,ss,t,to,搜索,定位


介紹

如果你想要從輸入文件中切割一部分,需要用到ss選項。

快速定位

需要將ss放在輸入文件的前面(即-i的前面

ffmpeg-ss 00:03:00 -i Underworld.Awakening.avi -frames:v 1 elesos1.jpg

11232683625_acb3f62819_o.jpg

上面的命令會將大約3分鍾處的畫面生成一幀, 這種基於關鍵幀的搜索會非常快,但缺點是只能定位到關鍵幀,而不一定是指定的時間00:03:00,因此不太精確。

[編輯]精確定位

需要將ss放在輸入文件的后面(即-i的后面

ffmpeg-i Underworld.Awakening.avi -ss 00:03:00 -frames:v 1 elesos2.jpg

11232683555_7cd1045f5c_o.jpg

上面的命令會精確地定位到3分鍾,並將該處的畫面生成一幀圖像。

注意上面2張圖片左下角的時間,第一張為"00:02:05:05" ,第2張為 "00:02:05:06".

輸入文件會一幀一幀地進行解碼直到到達ss所指定的位置,因此會非常慢。而且隨着指定時間越長,需要等待的時間也會越長。

[編輯]快速並且精確定位

需要在輸入文件前后同時指定ss參數

ffmpeg-ss 00:02:30-i Underworld.Awakening.avi -ss 00:00:30 -frames:v 1 elesos3.jpg

11232683565_295af0bf3f_o.jpg

這種方法綜合了上面2種方法的優點。

首先快速定位到3分鍾之前的某個時間點,然后從該時間點開始一幀一幀地慢慢解碼到3分鍾。

FFmpeg會首先快速定位到00:02:30附近的關鍵幀處,然后開始慢慢往后搜索30秒。結果與“精確定位”相同(左下角也是00:02:05:06),但是速度更快。

對於上面2個ss時間點(00:02:30和00:00:30)的設置依賴於關鍵幀的間隔(即GOP的大小),

X264默認GOP大小為250(即如果輸入幀率為25fps,則每10秒一個關鍵幀)。


切割片斷

如果想要從中間切割一段視頻,可以將ss和t參數聯合使用,其中t參數指定時長,例如“-ss 60 -t 10”將切割一段從60秒到70秒的片斷;

或者使用to選項指定結束時間點,如“ -ss 60 -to 70”也一樣切割一段從60秒到70秒的片斷;選項t和to不能同時使用,如果你同時指定,默認會使用參數t。

[編輯]注意

如果你僅僅在輸入文件之前(-i之前)指定了ss選項,那么時間戳會被重置為0,此時選項t和選項to產生的效果一樣。

ffmpeg-ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4 ffmpeg-i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4

上面例子中,第一個命令會得到從00:01:00 到 00:03:00的片斷,而第二個命令會真正得到從00:01:00 到 00:02:00的片斷。

如果你切割的時候使用了流拷貝stream copy (-c copy),並且想用 concat demuxer來合並你切割出來的片斷,你需要指定`-avoid_negative_ts 1`:

ffmpeg-ss 00:03:00 -i video.mp4 -t60-c copy -avoid_negative_ts 1 cut.mp4

[編輯]時間格式

你可以使用[HH:MM:SS]格式或者以秒為單位,如00:02:30 或者 150。如果你使用了小數,如02:30.05,小數點后面的05表示1秒*5%,即50毫秒(注:1秒=1000毫秒ms =106微秒µs)而不是幀數,如02:30.5表示2分鍾,30秒,500毫秒(即半秒)。

[編輯]

如果將-c:v copy與-ss同時使用,生成的文件可能不能播放,或者出現音視頻不同步的問題,因為FFmpeg是強制基於關鍵幀進行切割的。

[編輯]藝搜參考

http://trac.ffmpeg.org/wiki/Seeking%20with%20FFmpeg


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM