FFmpeg 升級指北

近期我參與了部門底層庫依賴的 FFmpeg 從 3.4 升級至 7.0.2 的工作,在此分享一些經驗和遇到的 API 變動。

將 FFmpeg 升級到高版本后,編譯過程中遇到大量報錯是常態。這些錯誤通常源于 API 接口變更或結構體字段調整。此時不必驚慌,核心解決思路是將報錯的接口或用法適配到新版本。

如何快速準確地找到新版本中的對應替代方案? 以下是我找到的一些方法:

  1. FFmpeg 官方文檔 :查找任何 API 用法和參數說明的最權威來源。

  2. FFmpeg 廢棄 API 文檔:這是解決升級問題的有效資源。文檔詳細列出了當前版本(如 7.0)相比舊版本廢棄的 API、結構體成員、宏等,并且明確指明了應該使用的新接口或替代方案。

  3. 互聯網搜索與 AI 輔助:如果在官方文檔中沒有找到直接的答案(特別是對于一些隱晦的變更或行為差異),搜索引擎和開發者社區(Stack Overflow 等)是重要的補充。像 DeepSeek 這類 AI 助手也是高效的查詢工具,能快速提供可能的替代方案或解釋變更背景。

  4. 源碼探索(最后手段):如果以上途徑都未能解決問題(這種情況極少遇到),最后的辦法是深入源碼。主要思路是先定位舊版本中相關 API/結構體的源碼實現,然后在高版本 FFmpeg 源碼的對應位置(或通過搜索相關功能關鍵詞),查看新版本是如何實現相同功能的。這需要一定的源碼閱讀能力。

在完成本次升級后,我整理了遇到的一些API變動。以下表格概述了這些變更及其影響/替代方案(詳細說明請參考官方文檔和廢棄列表):

變更類型舊版 API/字段新版 API/字段備注/參考
Packet 初始化av_init_packetav_packet_alloc(內部調用 get_packet_defaults參考
幀時間戳字段AVFrame::pkt_ptsAVFrame::pts參考
編解碼器參數類型AVCodec*const AVCodec*高版本函數普遍使用 const 修飾符
全局注冊函數av_register_all自動注冊輸入輸出設備仍需 avdevice_register_all() 參考
聲道布局表示channels 字段ch_layout 結構體更精確的聲道描述方式
音頻重采樣上下文創建swr_alloc_set_optsswr_alloc_set_opts2統一接口,支持更多參數
內存分配函數av_mallocz_arrayav_calloc參考
內存管理頭文件<libavutil/mem.h>內部實現mem_internal.h不再作為公共頭文件導出
解復用器遍歷舊版迭代方式av_demuxer_iterateMLT 框架適配示例 參考
音頻重采樣接口audio_resampleswr_convert參考
流創建參數avformat_new_streamcodec 參數無效參考
解碼接口avcodec_decode_video2/audio4avcodec_send_packet + avcodec_receive_frame參考
索引訪問方式AVStream::nb_index_entries/index_entriesavformat_index_get_entries_count() + avformat_index_get_entry()參考

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/88141.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/88141.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/88141.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RISCV Linux 虛擬內存精講系列三 -- setup_vm()

在 Linux 使用虛擬地址前&#xff0c;需要先配置頁表&#xff0c;這就是 setup_vm() 的作用。然而&#xff0c;Linux 的頁表配置&#xff0c;并不是一次過完成的&#xff0c;分了兩個階段&#xff0c;如下&#xff1a;在 setup_vm() 中&#xff0c;主要初始化了&#xff1a;1. …

創客匠人:解析創始人 IP 打造的底層邏輯與知識變現路徑

在數字經濟時代&#xff0c;創始人 IP 的價值被不斷放大&#xff0c;而知識變現作為 IP 商業閉環的核心環節&#xff0c;正成為無數創業者探索的方向。創客匠人深耕知識付費領域多年&#xff0c;見證了大量創始人從 0 到 1 打造 IP 并實現變現的全過程&#xff0c;其背后的邏輯…

Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示

主要步驟&#xff1a;在主框架類中添加消息處理函數聲明在 OnCreate 函數中啟用工具欄提示在消息映射中注冊 TTN_NEEDTEXT 消息使用 OnToolTipText 函數實現自定義提示文本1.在主程序的.h文件中加入afx_msg BOOL OnToolTipText(UINT id, NMHDR* pNMHDR, LRESULT* pResult); 2.在…

2025Q2大模型更新匯總(大語言模型篇)

摘要 2025年Q2大語言模型更新匯總&#xff1a; Qwen3&#xff0c;Deepseek-R1-0528&#xff0c;Doubao-Seed-1.6, MiniMax-M1, GPT4.1/O3/O4&#xff0c;Claude4/Gemini2.5 Qwen3 ? 開源MOE模型&#xff0c; ? MOE模型&#xff1a;Qwen3-235B-A22B&#xff0c;Qwen3-30B-…

【STM32】定時器中斷 + 含常用寄存器和庫函數配置(提供完整實例代碼)

通用定時器基礎知識 參考資料:STM32F1xx官方資料:《STM32中文參考手冊V10》-第14章通用定時器 通用定時器工作過程: 時鐘選擇 計數器時鐘可以由下列時鐘源提供: ① 內部時鐘(CK_INT) ② 外部時鐘模式1:外部輸入腳(TIx) ③ 外部時鐘模式2:外部觸發輸入(ETR) ④ 內部觸…

集群Redis

文章目錄前言一、Redis主從復制配置1.1.配置文件redis_master.conf,redis_slave.conf1.2.啟動服務1.3.檢查成果二、Redis集群配置2.1.服務器40.240.34.91集群配置2.2.其它服務器xxx.92,xxx.93集群配置2.3.啟動服務2.3.啟動集群服務2.4.檢查成果三、優劣四、結束前言 提示&…

ORA-600 kokiasg1故障分析---惜分飛

故障總結:客戶正常關閉數據庫,然后啟動報ORA-600 kokiasg1錯誤,通過對啟動分析確認是由于IDGEN1$序列丟失導致,修復該故障之后,數據庫啟動成功,但是后臺大量報ORA-600 12803,ORA-600 15264等錯誤,業務用戶無法登錄.經過深入分析,發現數據庫字典obj$中所有核心字典的序列全部被刪…

[RPA] 影刀RPA基本知識

1.應用的構成一個應用&#xff1a;由多條指令疊加組成一條指令代表了一個操作動作許多條指令按照一定的邏輯關系編排起來&#xff0c;就構成了一個應用(這里的應用可理解為軟件機器人RPA)一個應用 多個自動化指令的集合 2. 指令的一般構成在XXX對象上&#xff0c;對XXX元素執行…

pytest中測試特定接口

在pytest中只測試特定接口有以下幾種常用方法&#xff1a; 1. 通過測試函數名精確匹配 直接指定測試文件和函數名&#xff1a; pytest test_api.py::test_upload_image_with_library這將只運行test_api.py文件中名為test_upload_image_with_library的測試函數。 2. 使用關鍵字匹…

HMI圖形渲染優化:OpenGL ES與Vulkan的性能對比實戰

HMI 圖形渲染優化&#xff1a;OpenGL ES 與 Vulkan 的性能對比實戰**摘要想讓 HMI 界面的圖形渲染又快又流暢&#xff0c;卻在 OpenGL ES 和 Vulkan 之間糾結不已&#xff01;用 OpenGL ES&#xff0c;擔心性能不夠強勁&#xff0c;無法滿足復雜場景需求&#xff1b;選 Vulkan&…

Python數據分析基礎01:描述性統計分析

下一篇&#xff1a; 《Python數據分析基礎04&#xff1a;預測性數據分析》 《Python數據分析基礎03&#xff1a;探索性數據分析》 《python數據分析基礎02&#xff1a;數據可視化分析》 《Python數據分析基礎01&#xff1a;描述性統計分析》 描述性統計分析是統計學中最基…

成員不更新項目進度,如何建立進度更新機制

項目成員不及時更新進度的主要原因包括責任不明確、缺乏更新規則、溝通機制不暢、進度意識薄弱、工具使用不當等。其中尤其需要關注的是建立清晰的進度更新規則。明確規定成員應何時、如何、向誰匯報進度情況&#xff0c;使得項目的每項任務都有責任人和明確的更新頻率及形式&a…

JVM 整體架構詳解:線程私有與線程共享內存區域劃分

Java 虛擬機&#xff08;JVM&#xff09;作為 Java 程序運行的基礎&#xff0c;其內存模型和線程結構設計直接影響著程序的執行效率和穩定性。本文將從 線程是否共享 的角度出發&#xff0c;對 JVM 的整體內存結構進行清晰分類與簡明解析。一、JVM 內存區域劃分概覽 根據是否被…

【Linux庖丁解牛】— 庫的理解與加載!

1. 目標文件編譯和鏈接這兩個步驟&#xff0c;在Windows下被我們的IDE封裝的很完美&#xff0c;我們?般都是?鍵構建?常?便&#xff0c; 但?旦遇到錯誤的時候呢&#xff0c;尤其是鏈接相關的錯誤&#xff0c;很多?就束??策了。在Linux下&#xff0c;我們之前也學 習過如…

QML事件處理:鼠標、拖拽與鍵盤事件

在QML應用開發中&#xff0c;用戶交互是構建動態界面的核心。本文將全面解析QML中的三大交互事件&#xff1a;鼠標事件、拖拽事件和鍵盤事件&#xff0c;通過實際代碼示例展示如何實現豐富的用戶交互體驗。一、鼠標事件處理1. MouseArea基礎MouseArea是QML中處理鼠標交互的核心…

MySQL 8.0 OCP 1Z0-908 題目解析(20)

題目77 Choose the best answer. Which step or set of steps can be used to rotate the error log? ○ A) Execute SET GLOBAL max_error_count . ○ B) Rename the error log file on disk, and then execute FLUSH ERROR LOGS. ○ C) Execute SET GLOBAL log_error ‘’…

八股學習(四)---MySQL

一、MySQL如何進行SQL調優&#xff1f;我的回答&#xff1a;面試官好&#xff01;我想從SQL語句本身和數據庫結構兩方面來做MySQL的SQL調優。首先會優化SQL寫法&#xff0c;比如避免用SELECT *、減少子查詢嵌套&#xff0c;用JOIN代替&#xff0c;還有合理使用索引&#xff0c;…

華中科大首創DNN衍射量子芯片登《Science Advances》:3D打印實現160μm3高維邏輯門

01 前言華中科技大學王健/劉駿團隊在《Science Advances》發表突破性研究&#xff0c;利用飛秒激光三維打印技術&#xff0c;制造出全球首個聚合物基超緊湊高維量子光芯片。該芯片僅160微米見方&#xff08;約頭發絲直徑的1.5倍&#xff09;&#xff0c;卻實現了光子空間模式的…

【排序】插入排序

如果你已經對排序略知一二&#xff0c;現在正在復習排序的一些重點知識 ------------------------------------------------------------------------------------------------------------------------- 點贊收藏&#x1f308;&#xff0c;每天更新總結文章&#xff08;多以圖…

扣子Coze怎么模仿人類輸出(分段輸出)?

效果&#xff1a; 讓AI回復的更像人類 教程&#xff1a; 工作流&#xff1a; 假設大模型節點就是需要的回復&#xff0c;并且已經按句號&#xff08;。&#xff09;區別開每句話 后面連接一個 文本處理 節點&#xff0c;選擇“字符串分隔”&#xff0c;按“。”進行分割 分…