
我嘗試了很多由 ffmpeg 提供支援的影片剪輯器,它們都有相同的問題:如果不重新編碼,快速剪輯就不準確。我在自己的應用程式中嘗試了許多解決方案,但沒有任何效果符合我的需要。所以,我有這個想法來解決這個問題:假設我想產生一個不包含從 t1 到 t2 開始的卡盤的新影片。我希望 ffmpeg 這樣做將段 (t1, t2) 分成 3 個部分:
- 部分(t1-x,t1+y),它是一個完整的編碼區塊,應該重新編碼才能精確複製部分(t1,y)。
- 部分(t2-z,t3+w),它是一個完整的編碼區塊,應該重新編碼才能精確複製部分(z,t2)。
- 中間部分(y,z)包含完整的編碼區塊,可以原樣複製。
然後將上述步驟得到的 3 個部分連接起來。請注意,前兩部分預計會很小(其中之一或兩者都可以為零長度),因此重新編碼過程會很快。這將使我們能夠以稍慢的操作進行精確剪切,但仍然比重新編碼整個視訊快得多。如果我們可以用一個指令進行多次剪切,那麼速度會更快,所以我們遍歷幀一次。
那麼,我今天可以使用 ffmpeg 來做到這一點嗎?或者說,ffmpeg很快就能支持嗎?我希望有人可以應用這個,並告訴我們如何使用,或提及 ffmpeg 團隊的一些成員,或無論如何將其交付給他們。
答案1
ffmpeg支援使用參數進行關鍵影格剪切ss
,但關鍵影格的位置至關重要。
關鍵影格查找範例:
ffmpeg -ss 30 -i input_vid.mp4 -t 60 -c copy output_clip.mp4
全幀搜尋範例:
ffmpeg -i input_vid.mp4 -ss 30 -t 60 -c copy output_clip.mp4
這裡的參數-copy
很重要,因為它會導致
串流複製。在某些情況下,您需要新增參數-noaccurate_seek
。
欲了解更多信息,請參閱:
大多數影片使用執行時間壓縮的編解碼器,因此指定的切點可能依賴該切點之前(和之後)的幀才能正確解碼。因此,當您使用 ffmpeg 使用該模式修剪影片時copy
,ffmpeg 必須包含修剪片段之前和之後的所有幀,這是正確解碼片段所需的。這可能會導致起始黑色片段。
如果仍使用影印模式但避免出現黑段,則需要設定開關-avoid_negative_ts
。