簡體   English   中英

FFmpeg:如何使用 C++ 代碼更改視頻文件的幀速率?

[英]FFmpeg: how to use C++ code to change the frame rate of a video file?

我知道使用 FFmpeg 命令更改視頻文件的幀速率會更容易。 但無論如何,如果我想用 C++ 代碼來做,並使用 FFmpeg 庫,我該怎么做?

我想我應該能夠在源代碼中找到線索。 在繼續之前,我希望會有一些好的介紹或示例。

這相當簡單,您只需要修改視頻流的 time_base 即可。 對於簡單的容器格式(例如 AVI),您只需在標題中執行此操作。 如果您堅持通過 ffmpeg API 執行此操作,則需要遍歷輸入流中的所有幀,並將它們復制到輸出流。

以上假設您只想在不丟幀的情況下更改 FPS(即減慢或加快視頻速度)。 但是,如果您想在更改 FPS 的同時保持視頻播放的原始速度,則需要重新編碼視頻,即對每一幀進行解碼和編碼,同時插入額外的幀或刪除一些幀。 您不能簡單地從視頻中刪除幀 - 例如,當從 30FPS 轉換為 15FPS 時,您不能簡單地刪除每第二幀,因為它可能是一個關鍵幀,它會破壞之后的所有幀,直到遇到下一個關鍵幀。 同樣,您不能在提高 FPS 時簡單地復制幀,因為 P 幀僅適用於它之前的幀,因此復制它會破壞您的視頻。 為此,我建議查看我的卡拉 OK 歌詞編輯器源代碼,尤其是視頻解碼視頻編碼

暫無
暫無

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

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