2.4 Windows Conan編譯FFmpeg 4.4.1

Conan的安裝與使用參考之前的文章:Conan簡單使用

一、Conan編譯ffmpeg

1.1 Conan的配置文件

創建配置文件:C:\Users\wujh\.conan2\profiles\vs2019

[settings]
arch=x86_64
build_type=Release
compiler=msvc
compiler.cppstd=14
compiler.runtime=dynamic
compiler.version=192
os=Windows

解析說明:

設置項說明
archx86_64目標架構為 64 位(x86_64)。
build_typeRelease構建類型為 Release(優化模式,非調試)。
compilermsvc使用 Microsoft Visual C++ 編譯器。
compiler.cppstd14C++ 標準版本為 C++14。
compiler.runtimedynamic使用動態運行時庫(MD/MDd)。
compiler.version192MSVC 編譯器版本,對應 Visual Studio 2019(版本號 192.x)。
osWindows目標操作系統為 Windows。

1.2 在項目中創建conanfile.txt文件

查詢庫的版本:conancenter

conanfile.txt文件內容:

[requires]
ffmpeg/4.4.3[options]
ffmpeg/*:shared=True
ffmpeg/*:with_libx264=True
ffmpeg/*:with_libx265=True
ffmpeg/*:with_libfdk_aac=True
ffmpeg/*:with_libmp3lame=Trueffmpeg/*:with_libvpx=False
ffmpeg/*:with_openjpeg=False
ffmpeg/*:with_openh264=False
ffmpeg/*:with_vorbis=False
ffmpeg/*:with_opus=False
ffmpeg/*:with_libwebp=False
ffmpeg/*:with_libaom=False
ffmpeg/*:with_ssl=False[generators]
CMakeDeps
CMakeToolchain[layout]
cmake_layout

說明:

  • requires節下,指定庫和其版本號。
  • options節下,指定庫的選項
  • generators節,指定生成器設置
    • CMAkeDeps 生成庫的查找文件 Findxxx.cmake
    • CMakeToolchain 配置工具鏈
  • layout節下,指定項目目錄布局,cmake_layout標準的cmake項目目錄結構

1.3 ffmpeg的Conan選項

分類Conan 選項對應 ./configure 參數說明
FFmpeg 庫ffmpeg/*:shared=True--enable-shared / --disable-shared編譯動態庫(True)或靜態庫(False)
ffmpeg/*:avdevice=True--enable-avdevice / --disable-avdevice啟用 FFmpeg 的設備處理模塊
ffmpeg/*:avcodec=True--enable-avcodec / --disable-avcodec啟用 FFmpeg 的編解碼模塊
ffmpeg/*:avformat=True--enable-avformat / --disable-avformat啟用 FFmpeg 的封裝/解封裝模塊
ffmpeg/*:swresample=True--enable-swresample / --disable-swresample啟用音頻重采樣模塊
ffmpeg/*:swscale=True--enable-swscale / --disable-swscale啟用視頻縮放和像素格式轉換模塊
ffmpeg/*:postproc=True--enable-postproc / --disable-postproc啟用視頻后處理模塊
ffmpeg/*:avfilter=True--enable-avfilter / --disable-avfilter啟用音視頻過濾器模塊
視頻編碼ffmpeg/*:with_libx264=True--enable-libx264 / --disable-libx264啟用 H.264 編碼支持(基于 libx264)
ffmpeg/*:with_libx265=True--enable-libx265 / --disable-libx265啟用 H.265/HEVC 編碼支持(基于 libx265)
ffmpeg/*:with_libvpx=True--enable-libvpx / --disable-libvpx啟用 VP8/VP9 編碼支持(基于 libvpx)
ffmpeg/*:with_libwebp=True--enable-libwebp / --disable-libwebp啟用 WebP 編碼支持(基于 libwebp)
ffmpeg/*:with_openjpeg=True--enable-libopenjpeg / --disable-libopenjpeg啟用 JPEG 2000 編碼支持(基于 openjpeg)
ffmpeg/*:with_openh264=True--enable-libopenh264 / --disable-libopenh264啟用 H.264 編碼支持(基于 openh264)
ffmpeg/*:with_libaom=True--enable-libaom / --disable-libaom啟用 AV1 編碼支持(基于 libaom)
ffmpeg/*:with_libsvtav1=True--enable-libsvtav1 / --disable-libsvtav1啟用 AV1 編碼支持(基于 SVT-AV1)
ffmpeg/*:with_libdav1d=True--enable-libdav1d / --disable-libdav1d啟用 AV1 解碼支持(基于 libdav1d)
音頻編碼ffmpeg/*:with_libmp3lame=True--enable-libmp3lame / --disable-libmp3lame啟用 MP3 編碼支持(基于 libmp3lame)
ffmpeg/*:with_libfdk_aac=True--enable-libfdk-aac / --disable-libfdk-aac啟用 AAC 編碼支持(基于 libfdk-aac)
ffmpeg/*:with_opus=True--enable-libopus / --disable-libopus啟用 Opus 音頻編碼支持(基于 libopus)
ffmpeg/*:with_vorbis=True--enable-libvorbis / --disable-libvorbis啟用 Vorbis 音頻編碼支持(基于 libvorbis)
其他常用ffmpeg/*:with_sdl=False--enable-sdl / --disable-sdl啟用或禁用 SDL 支持(用于 ffplay 等工具)
ffmpeg/*:with_freetype=True--enable-libfreetype / --disable-libfreetype啟用 FreeType 字體渲染支持
ffmpeg/*:with_programs=True--enable-programs / --disable-programs編譯 FFmpeg 的命令行工具(如 ffmpeg、ffplay、ffprobe)
ffmpeg/*:disable_everything=False--disable-everything禁用所有默認組件(False 表示不禁用)
ffmpeg/*:disable_all_encoders=False--disable-encoders禁用所有編碼器(False 表示不禁用)
ffmpeg/*:enable_encoders=True--enable-encoders啟用所有編碼器
ffmpeg/*:disable_all_decoders=False--disable-decoders禁用所有解碼器(False 表示不禁用)
ffmpeg/*:enable_decoders=True--enable-decoders啟用所有解碼器
ffmpeg/*:disable_all_hardware_accelerators=False--disable-hwaccels禁用所有硬件加速(False 表示不禁用)
ffmpeg/*:enable_hardware_accelerators=True--enable-hwaccels啟用硬件加速支持
ffmpeg/*:disable_all_muxers=False--disable-muxers禁用所有封裝器(False 表示不禁用)
ffmpeg/*:enable_muxers=True--enable-muxers啟用所有封裝器
ffmpeg/*:disable_all_demuxers=False--disable-demuxers禁用所有解封裝器(False 表示不禁用)
ffmpeg/*:enable_demuxers=True--enable-demuxers啟用所有解封裝器
ffmpeg/*:disable_all_parsers=False--disable-parsers禁用所有解析器(False 表示不禁用)
ffmpeg/*:enable_parsers=True--enable-parsers啟用所有解析器
ffmpeg/*:disable_all_bitstream_filters=False--disable-bsfs禁用所有比特流過濾器(False 表示不禁用)
ffmpeg/*:enable_bitstream_filters=True--enable-bsfs啟用所有比特流過濾器
ffmpeg/*:disable_all_protocols=False--disable-protocols禁用所有協議(False 表示不禁用)
ffmpeg/*:enable_protocols=True--enable-protocols啟用所有協議
ffmpeg/*:disable_all_devices=False--disable-devices禁用所有設備(False 表示不禁用)
ffmpeg/*:disable_all_input_devices=False--disable-indevs禁用所有輸入設備(False 表示不禁用)
ffmpeg/*:enable_input_devices=True--enable-indevs啟用所有輸入設備
ffmpeg/*:disable_all_output_devices=False--disable-outdevs禁用所有輸出設備(False 表示不禁用)
ffmpeg/*:enable_output_devices=True--enable-outdevs啟用所有輸出設備
ffmpeg/*:disable_all_filters=False--disable-filters禁用所有過濾器(False 表示不禁用)
ffmpeg/*:enable_filters=True--enable-filters啟用所有過濾器
ffmpeg/*:with_asm=True--enable-asm / --disable-asm啟用匯編優化
ffmpeg/*:with_zlib=True--enable-zlib / --disable-zlib啟用 zlib 壓縮支持
ffmpeg/*:with_bzip2=True--enable-bzlib / --disable-bzlib啟用 bzip2 壓縮支持
ffmpeg/*:with_lzma=True--enable-lzma / --disable-lzma啟用 LZMA 壓縮支持
ffmpeg/*:with_libiconv=True--enable-libiconv / --disable-libiconv啟用 libiconv 字符編碼轉換支持
ffmpeg/*:with_fontconfig=False--enable-libfontconfig / --disable-libfontconfig啟用或禁用 fontconfig 支持
ffmpeg/*:with_fribidi=False--enable-libfribidi / --disable-libfribidi啟用或禁用 fribidi 雙向文本支持
ffmpeg/*:with_harfbuzz=False--enable-libharfbuzz / --disable-libharfbuzz啟用或禁用 harfbuzz 文本整形支持
ffmpeg/*:with_zeromq=False--enable-libzmq / --disable-libzmq啟用或禁用 ZeroMQ 支持
ffmpeg/*:with_ssl=openssl--enable-openssl / --disable-openssl啟用 OpenSSL 支持(用于安全協議)
ffmpeg/*:with_soxr=False--enable-libsoxr / --disable-libsoxr啟用或禁用 SoX 重采樣支持

說明:

  • FFmpeg 庫:FFmpeg 核心模塊,負責音視頻處理、轉換和過濾。
  • 視頻編碼:支持 H.264、H.265、VP8/VP9、WebP、JPEG 2000、AV1 等視頻編碼格式。
  • 音頻編碼:支持 MP3、AAC、Opus、Vorbis 等音頻編碼格式。
  • 其他常用:包括硬件加速、協議、設備、過濾器、壓縮庫、字體渲染、命令行工具等功能。

查詢庫的版本:ffmpeg/7.1.1
在這里插入圖片描述

1.4 設置cmd終端代理

臨時設置代理(僅當前會話有效)

# 設置HTTP和HTTPS代理
set http_proxy=http://127.0.0.1:11819
set https_proxy=http://127.0.0.1:11819# 驗證代理是否生效
curl https://www.google.com# 清除代理設置
set http_proxy=
set https_proxy=

永久設置代理(對所有會話有效)

# 設置HTTP和HTTPS代理
setx http_proxy "http://127.0.0.1:11819"
setx https_proxy "http://127.0.0.1:11819"# 清除代理設置
setx http_proxy ""
setx https_proxy ""

1.5 編譯

# 查看vs2019配置文件
conan profile show -pr=vs2019# 清理緩存
conan cache clean "*"      # 清理所有編譯緩存conan remove "ffmpeg*" -c  # 清理ffmpeg緩存(包括源碼)
conan remove "*" -c        # 清理所有緩存(包括源碼)# 安裝依賴庫
conan install . --build=missing  --profile:host=vs2019 --profile:build=vs2019

在這里插入圖片描述
在這里插入圖片描述

二、VSCode使用ffmpeg庫

項目目錄結構:

在這里插入圖片描述

main.c文件內容:

#include <stdio.h>
#include "libavcodec/avcodec.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavformat/avformat.h"
int main()
{printf("avcodec version is %u \n",avcodec_version());printf("avdevice version is %u \n",avdevice_version());printf("avfilter version is %u \n",avfilter_version());printf("avformat version is %u \n",avformat_version());return 0;
}

CMakeLists.txt文件內容:

cmake_minimum_required(VERSION 3.15)
project(ffmpeg_test)# 包含 Conan 生成的工具鏈文件
include(${CMAKE_BINARY_DIR}/generators/conan_toolchain.cmake)# 查找 FFmpeg 包
find_package(ffmpeg REQUIRED)# 設置可執行文件輸出目錄為 bin  
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/bin)# 創建可執行文件
add_executable(ffmpeg_test src/main.c)# 鏈接 FFmpeg 的必要組件
target_link_libraries(ffmpeg_test PRIVATEffmpeg::avutilffmpeg::swresampleffmpeg::swscaleffmpeg::avcodecffmpeg::avformatffmpeg::avfilterffmpeg::avdeviceffmpeg::postproc
)

構建命令

# 生成構建系統(在build目錄下執行)
cmake ..# 編譯(在build目錄下執行)
cmake --build . --config Release

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

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

相關文章

社群經濟視域下開源鏈動2+1模式與AI智能名片賦能S2B2C商城小程序的創新發展研究

摘要&#xff1a;在數字經濟蓬勃發展的背景下&#xff0c;社群經濟作為連接用戶情感與價值反哺的新型經濟形態&#xff0c;正通過技術創新與模式重構實現深度演化。本文基于社群經濟“創造有價值連接”的本質特征&#xff0c;系統探討“開源鏈動21模式”“AI智能名片”與“S2B2…

【計算機網絡】——reactor模式高并發網絡服務器設計

&#x1f525;個人主頁&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收錄專欄&#x1f308;&#xff1a;計算機網絡 &#x1f339;往期回顧&#x1f339;&#xff1a;【計算機網絡】非阻塞IO——epoll 編程與ET模式詳解——(easy)高并發網絡服務器設計 &#x1f516;流水不…

Uniapp跨端兼容性全方位解決方案

在當今多端融合的移動互聯網時代&#xff0c;Uniapp作為一款優秀的跨平臺開發框架&#xff0c;已成為許多開發者的首選。然而&#xff0c;真正的挑戰在于如何優雅地處理不同平臺之間的差異。本文將全面剖析Uniapp跨端開發的兼容性處理方案&#xff0c;提供從基礎到高級的完整解…

迅為RK3576開發板NPUrknn-toolkit2環境搭建和使用docker環境安裝

開發板采用核心板底板結構&#xff0c;在我們的資料里提供了底板的原理圖工程以及PCB工程&#xff0c;可以實現真正意義上的裁剪、定制屬于自己的產品&#xff0c;滿足更多應用場合。 迅為針對RK3576開發板整理出了相應的開發流程以及開發中需要用到的資料&#xff0c;并進行詳…

什么是 OpenFeigin ?微服務中的具體使用方式

什么是Feign&#xff1f; Feign 是一種聲明式的 HTTP 客戶端框架&#xff0c;主要用于簡化微服務架構中服務之間的遠程調用&#xff0c;也可以通過定義接口和注解的方式調用遠程服務&#xff0c;無需手動構建 HTTP 請求或解析響應數據。Spring Cloud 對 Feign 進行了增強&…

對抗性提示:進階守護大語言模型

人工智能模型正快速進化 —— 變得更具幫助性、更流暢&#xff0c;并且更深入地融入我們的日常生活和商業運營中。但隨著其能力的提升&#xff0c;風險也在增加。在維護安全可信的人工智能方面&#xff0c;最緊迫的挑戰之一是對抗性提示&#xff1a;這是一種微妙且通常富有創意…

運營商頻段

以下是三大運營商&#xff08;中國移動、中國電信、中國聯通&#xff09;及中國廣電的 5G 主要頻段 及其所屬運營商的整理表格&#xff1a; 運營商頻段上行頻率 (MHz)下行頻率 (MHz)帶寬備注廣電n28703-733758-788230MHz移動共享n794900-4960-60MHz-移動n412515-2675-160MHz-n7…

項目拓展-Apache對象池,對象池思想結合ThreadLocal復用日志對象

優化日志對象創建以及日志對象復用 日志對象上下文實體類 traceId 請求到達時間戳 請求完成時間戳 請求總共耗費時長 get/post/put/delete請求方式 Http狀態碼 原始請求頭中的所有鍵值對 請求體內容 響應體內容 失敗Exception信息詳細記錄 是否命中緩存 package c…

Javaweb - Vue入門

Vue是一款用于構建用戶界面的漸進式的JavaScript框架。 使用步驟 引入Vue模塊&#xff0c;創建Vue的應用實例&#xff0c;定義元素&#xff0c;交給Vue控制。 一、引入Vue模塊 因為使用的是模塊化的JavaScript&#xff0c;因此在script標簽內要聲明一個屬性&#xff1a;typ…

C++ 標準模板庫各個容器的應用場景分析

C 標準模板庫&#xff08;STL&#xff09;中的容器分為序列式容器、關聯式容器和無序容器&#xff0c;各自適用于不同場景。以下是主要容器的應用場景及案例&#xff1a; 一、序列式容器 元素按插入順序存儲&#xff0c;支持線性訪問。 1. vector 場景&#xff1a;動態數組…

安裝前端vite框架,后端安裝fastapi框架

前期準備 首先新建一個文件夾&#xff0c;文件夾里面新建一個文件夾&#xff0c;用于安裝依賴 安裝vite框架 npm init -y 目的是安裝package.json配置文件 npm install vite --save-dev 安裝vite框架 安裝完是這個樣子 新建了一個文件夾和js文件 后端內容 main.js document.…

深度學習:基礎與概念(第1章:深度學習革命)

目錄 第1章&#xff1a;深度學習革命 1.1深度學習的影響 1.1.1醫療診斷 1.1.2蛋白質結構預測 1.1.3圖像合成 1.1.4大語言模型 1.2一個教學示例 1.2.1合成數據 1.2.2線性模型 1.2.3誤差函數 1.2.4模型復雜度 1.2.5正則化 1.2.6模型選擇 1.3機器學習簡史 1.3.1單層…

通過觸發器統計訪問數據庫的客戶端IP地址

通過觸發器統計訪問數據庫的客戶端IP地址 創建用戶登錄審計表創建登錄審計觸發器查看登錄審計結果禁用和啟用觸發器創建用戶登錄審計表 創建記錄表: create table appuser1.user_login_audit (login_time DATE,session_id number,username VARCHAR2(30),os_user VARCHAR2(30…

在MCU上的1微秒的延遲實現方案及測量方法

運行環境&#xff1a; stm32h743iit6; 主頻480MHz; APB1; 240MHz; TIM5 240MHz; 預分頻系數為1; 定時器計數頻率240MHz&#xff1b; 應用需求&#xff1a;實現軟件模擬IIC&#xff0c;延遲精度2個微秒&#xff1b; 量變引起質變&#xff0c;當延遲粒度太小時&#xff0c;需要考…

macos電腦本地搭建mistral-7b大模型出現4-bit量化和緩存不足問題的記錄

問題背景 本人想再本地筆記本電腦上搭建一個mistral-7b的大模型&#xff0c;在搭建的過程中&#xff0c;出現了4-bit量化模式無法處理的問題&#xff0c;以及電腦內存/顯存不足的問題&#xff0c;導致無法搭建 電腦硬件信息 名稱&#xff1a;2019 Mac book pro 內存&#xff1a…

C# 基礎知識總結(帶詳細文字說明)

1. 基礎語法結構 C# 程序由命名空間、類和方法組成。每個程序必須有一個 Main 方法作為入口點。using 指令用于導入命名空間&#xff0c;Console.WriteLine() 是常用的輸出方法。 csharp 復制 下載 using System; // 引入核心命名空間class Program // 類定義 {static v…

C#最佳實踐:為何要統一命名

C#最佳實踐:為何要統一命名 在 C# 編程的世界里,代碼就像是一座龐大的數字城市,而命名則是城市中縱橫交錯的街道名稱與建筑標識。如果沒有統一的命名規范,這座城市將陷入混亂,開發者在其中探索、維護代碼時也會迷失方向。統一命名不僅是一種編程習慣,更是保障代碼質量、…

通過后端連接Opengauss數據庫的方法

文章目錄 通過后端連接Opengauss數據庫的方法一、為什么默認不能訪問&#xff1f;二、要讓普通用戶從宿主機訪問數據庫&#xff0c;需要以下幾個步驟&#xff1a;1. 使用 omm 超級用戶登錄數據庫2. 創建一個應用程序專用用戶&#xff0c;并設置密碼3. 提供給應用程序專用用戶對…

AWS Config:概述、優勢以及如何開始?

在當今云原生架構快速發展的背景下&#xff0c;越來越多企業意識到資源配置管理和合規性審查的重要性。作為 AWS 官方授權代理商&#xff0c;在云上致力于為企業客戶提供全面、可靠的云服務解決方案&#xff0c;幫助企業輕松上云、合規運營。本文將為您詳細解讀 AWS Config ——…

金融領域LLM開源測試集

BizFinBench 中文 金融業務場景基準數據集 結合迭代校準評估框架IteraJudge&#xff0c;對25個先進LLM進行全面評估&#xff0c;發現在金融AI領域與人類期望存在顯著性能差距。 https://arxiv.org/pdf/2505.19457 https://github.com/HiThink-Research/BizFinBench/tree/m…