簡體   English   中英

如何在不重寫整個視頻文件的情況下僅替換流中的一個數據幀? (FFmpeg)

[英]How can I replace only one data frame from stream without rewriting whole video file ? (FFmpeg)

我創建了兩個流:用於輸入視頻文件和用於輸出。 但是,即使我只想更改一個(第一個)視頻幀,我也必須為循環中的每個幀使用av_read_framewrite_frame ,以便將它們從一個文件放置到另一個文件。

如何僅更改一幀,然后以其他方式將其他幀刷新到輸出,而無需循環av_read_framewrite_frame

如果您將視頻中的幀視為一種鏈接的列表或數組,那么您提出的問題似乎是一個邏輯問題-我想您只是想替換陣列或列表中的一個元素而不必更改其他所有內容,我想呢?

問題在於視頻流通常不像這樣簡單地安排。

例如,編碼經常使用先前和甚至隨后的幀作為當前幀的參考。 例如,每第10幀可能被完全編碼,而其間的幀則被簡單地編碼為這些參考幀的增量。

同樣,視頻容器(例如mp4)經常使用偏移量來指向其中的各個元素。 因此,如果您潛入內部並通過用另一框架替換特定框架來更改其大小,則偏移將不再正確。

如果您對大型視頻文件中的單個幀執行此操作,並且大致了解了幀的位置,那么您可能會發現,將視頻文件分割成一個長段,然后再更改您想要的位,這樣會更有效。包含要更改的框架的短部分,然后是長部分。 您可以僅在短部分中應用更改,然后在末尾連接視頻。

如果您這樣做,則必須使用適當的實用工具拆分和連接視頻,原因與上述相同-即確保拆分的視頻具有正確的標題信息,偏移量等。

ffmpeg支持這些類型的功能-例如,您可以在此處查看串聯文檔:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM