我可以在一項操作中混合複製和編碼以實現準確而快速的剪切嗎?

我可以在一項操作中混合複製和編碼以實現準確而快速的剪切嗎?

我嘗試了很多由 ffmpeg 提供支援的影片剪輯器,它們都有相同的問題:如果不重新編碼,快速剪輯就不準確。我在自己的應用程式中嘗試了許多解決方案,但沒有任何效果符合我的需要。所以,我有這個想法來解決這個問題:假設我想產生一個不包含從 t1 到 t2 開始的卡盤的新影片。我希望 ffmpeg 這樣做將段 (t1, t2) 分成 3 個部分:

  1. 部分(t1-x,t1+y),它是一個完整的編碼區塊,應該重新編碼才能精確複製部分(t1,y)。
  2. 部分(t2-z,t3+w),它是一個完整的編碼區塊,應該重新編碼才能精確複製部分(z,t2)。
  3. 中間部分(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

相關內容