2.3 Windows Vcpkg+MSVC編譯FFmpeg 4.4.1

一、vcpkg安裝ffmpeg 4.4.1

vcpkg的使用可以參考之前的文章:vcpkg 使用

1.1 查看vcpkg中的ffmpeg版本

查看庫的版本:vcpkg.io
在這里插入圖片描述
在這里插入圖片描述

1.2 vcpkg.json文件解析

創建vcpkg.json文件:

{"builtin-baseline": "984f9232b2fe0eb94f5e9f161d6c632c581fff0c","dependencies": [{"name": "ffmpeg","features": ["x264", "x265","fdk-aac","mp3lame"]}],"overrides": [{"name": "ffmpeg","version": "4.4.1","port-version": 20}]
}

說明:

  • builtin-baseline:是vcpkg的commit-idvcpkg如果是解壓編譯的,是無法獲取該id的
    • 獲取commit-idgit -C D:\Program\Vcpkg\vcpkg rev-parse HEAD
  • dependencies:只需要填寫庫名稱即可。
    • name 庫名稱
    • features 依賴庫
  • overrides 指定庫的版本
    • version:庫主版本號
    • port-version: vcpkg端口版本號

1.3 ffmpeg 常用feature

查找 feature:vcpkg search ffmpeg

分類Feature 名稱描述是否默認啟用備注
視頻編碼x264H.264 視頻編碼支持,使用 libx264 庫需要 GPLv2+ 許可證,需手動啟用
x265H.265/HEVC 視頻編碼支持,使用 libx265 庫需要 GPLv2+ 許可證,需手動啟用
vpxVP8/VP9 視頻編碼支持,使用 libvpx 庫支持 WebM 編碼,需手動啟用
aomAV1 視頻編碼支持,使用 libaom 庫AV1 編碼,需手動啟用
webpWebP 圖像編碼支持,使用 libwebp 庫用于 WebP 圖像和動畫編碼
openh264H.264 視頻編碼支持,使用 Cisco OpenH264 庫受專利限制,僅支持基線配置文件
音頻編碼fdk-aacAAC 音頻編碼支持,使用 Fraunhofer FDK AAC 庫非自由許可證,需手動啟用
mp3lameMP3 音頻編碼支持,使用 LAME 庫需手動啟用,廣泛用于 MP3 編碼
opusOpus 音頻編碼支持,使用 libopus 庫高質量低延遲音頻編碼,需手動啟用
flacFLAC 無損音頻編碼支持,使用 libflac 庫無損音頻編碼,需手動啟用
其他常用ffmpeg構建 FFmpeg CLI 工具(ffmpeg.exe)核心命令行工具,包含 muxer/demuxer 和基本濾鏡
ffprobe構建 ffprobe 工具,用于分析媒體文件信息媒體元數據和流信息分析工具
ffplay構建 ffplay 工具,用于媒體播放需要 SDL2 依賴,簡單的媒體播放器
sdl2SDL2 庫支持,用于 ffplay 和其他圖形/音頻輸出ffplay 的依賴,需手動啟用
fontconfigFontconfig 支持,用于字幕渲染和文本濾鏡需手動啟用,增強字幕渲染能力
freetypeFreeType 字體渲染支持,用于字幕和文本濾鏡需手動啟用,增強字幕渲染能力
openclOpenCL 硬件加速支持,用于濾鏡和部分編碼/解碼需 OpenCL 兼容硬件,實驗性支持
vaapiVAAPI 硬件加速支持(Linux),用于視頻編碼/解碼Linux 平臺,需 Intel/AMD GPU 支持
vdpauVDPAU 硬件加速支持(Linux),用于視頻解碼Linux 平臺,需 NVIDIA GPU 支持
openjpegJPEG 2000 圖像編碼支持,使用 OpenJPEG 庫需手動啟用,支持 J2K 視頻
zlibZlib 壓縮支持,用于某些容器格式(如 PNG、ZIP)需手動啟用,常見依賴
bzip2Bzip2 壓縮支持,用于某些容器格式需手動啟用,較少使用
lzmaLZMA 壓縮支持,用于某些容器格式(如 XZ、TIFF)需手動啟用,常見于高壓縮場景
srtSRT 協議支持,用于低延遲流傳輸需手動啟用,適用于直播
rtmpRTMP 協議支持,用于流媒體傳輸(如 YouTube 直播)需手動啟用,依賴 OpenSSL 或 GnuTLS

1.4 編譯安裝庫

# 臨時設置代理(powershell終端)
$env:HTTP_PROXY = "http://127.0.0.1:11819"
$env:HTTPS_PROXY = "http://127.0.0.1:11819"# 指定VS版本編譯,vcpkg默認使用最新版本的VS編譯【可選】
# $env:VCPKG_VISUAL_STUDIO_PATH = "D:\Program\Program Files (x86)\Microsoft Visual Studio\2017\Community"# 編譯安裝(常見Triplet類型在下面表格)
vcpkg.exe install --triplet x64-windows-release  --x-install-root=.\tmp
Triplet 名稱庫鏈接方式運行時庫鏈接構建類型
x64-windows動態 (DLL)動態 (/MD)Debug + Release
x64-windows-release動態 (DLL)動態 (/MD)Release Only
x64-windows-static靜態 (LIB)靜態 (/MT)Debug + Release
x64-windows-static-release靜態 (LIB)靜態 (/MT)Release Only
x64-windows-static-md靜態 (LIB)動態 (/MD)Debug + Release
x64-windows-static-md-release靜態 (LIB)動態 (/MD)Release Only

注意--x-install-root 是指定庫的安裝目錄,最終庫的目錄是:tmp\x64-windows

二、VSCode+CMake+VS2019編譯器 使用ffmpeg

項目目錄結構:
在這里插入圖片描述

main.c文件內容:

#include <stdio.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>int main() {// 待檢查的編解碼器列表const char *codecs[] = {"libx264",    // H.264 編碼器"libx265",    // HEVC 編碼器"libfdk_aac", // AAC 編碼器"libmp3lame", // MP3 編碼器NULL          // 結束標記};printf("FFmpeg 集成編解碼器狀態檢查:\n");printf("===========================\n");// 遍歷并檢查每個編解碼器for (int i = 0; codecs[i] != NULL; i++) {const AVCodec *codec = avcodec_find_encoder_by_name(codecs[i]);if (!codec) {// 若編碼器未找到,嘗試查找解碼器codec = avcodec_find_decoder_by_name(codecs[i]);}if (codec) {printf("[?] %-12s : 已啟用 (類型: %s)\n", codecs[i], codec->type == AVMEDIA_TYPE_VIDEO ? "視頻" : "音頻");} else {printf("[?] %-12s : 未啟用或未編譯\n", codecs[i]);}}return 0;
}

CMakeLists.txt文件內容:

cmake_minimum_required(VERSION 3.10)
project(ffmpeg_test VERSION 1.0)set(CXX_STANDARD 11)
set(CXX_STANDARD_REQUIRED True)# 設置可執行文件輸出目錄為 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)# 配置FFmpeg(avcodec.lib時動態庫的導入庫)
set(FFMPEG_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/ffmpeg_4.4.1)
include_directories(${FFMPEG_DIR}/include)
set(FFMPEG_LIBS${FFMPEG_DIR}/lib/avdevice.lib${FFMPEG_DIR}/lib/avfilter.lib${FFMPEG_DIR}/lib/avformat.lib${FFMPEG_DIR}/lib/avcodec.lib${FFMPEG_DIR}/lib/swscale.lib${FFMPEG_DIR}/lib/swresample.lib${FFMPEG_DIR}/lib/avutil.lib
)# 編譯和鏈接依賴庫
add_executable(${PROJECT_NAME} src/main.c)
target_link_libraries(${PROJECT_NAME} PRIVATE ${FFMPEG_LIBS} )# 使用file(GLOB)獲取所有DLL文件
file(GLOB FFMPEG_DLLS "${FFMPEG_DIR}/bin/*.dll")# 添加自定義命令,在構建后復制DLL文件到輸出目錄
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different${FFMPEG_DLLS}"${CMAKE_RUNTIME_OUTPUT_DIRECTORY}"
)

構建命令

# 生成構建系統(在項目根目錄下執行)
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE --no-warn-unused-cli -S./ -B./build -G "Visual Studio 16 2019" -T host=x64 -A x64# 編譯(在build目錄下執行)
cmake --build . --config Release

通過cmake插件生成構建系統文件:
在這里插入圖片描述

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

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

相關文章

docker -v 之后docker cp報錯

問題 我現在在本地已經可以正確運行這個文本糾錯接口了&#xff0c;使用了-v 掛載&#xff0c;&#xff0c;當我使用docker cp時&#xff0c;報錯了Error response from daemon: unlinkat /app/pycorrector/.git/objects/pack/pack-xxxxxx.pack: device or resource busy&…

10人團隊SolidWorks云桌面服務器怎么連接

在當今數字化設計領域&#xff0c;SolidWorks作為主流的三維CAD軟件&#xff0c;對硬件性能要求較高。 對于10人團隊共享使用場景&#xff0c;云桌面服務器方案能有效解決硬件成本高、協作效率低等問題&#xff0c;這需從硬件選型、網絡架構、云桌面平臺部署、軟件授權管理及用…

從源碼角度了解Elasticsaerch(分布式協調排序、深分頁問題)

引文 Elasticsearch基于Lucene所以很多系統實現都在其中,所以可以先看看Lucene的實現: https://blog.csdn.net/qq_35040959/article/details/147931034 項目組件 不像Kafka這種頂級項目核心性能組件全自己實現,ELK中有很多引用至第三方開放庫; 網絡模型-Netty 網絡模型多重…

共讀AI新圣經-深度學習讀書筆記01

提示&#xff1a;本文是我參加datawhale活動的讀書筆記&#xff0c;這是第一章的閱讀筆記 文章目錄 前言一、深度學習能做什么&#xff1f;二、教學案例總結 前言 隨著大數據和算力的大幅提升&#xff0c;基于數據學習的解決方案正取代基于人工設計的解決方案 提示&#xff1a…

Android項目資源字符串內容多語言對齊工具 Python

Android項目資源字符串內容多語言對齊工具&#xff1a; #!/usr/bin/env python3import re from dataclasses import dataclass, field from typing import Optional, Dict, List from pathlib import Path import tkinter as tk from tkinter import filedialog, messageboxda…

創客匠人分享:知識變現時代的創始人 IP 打造路徑

當知識付費市場規模突破千億&#xff0c;創始人 IP 已成為知識變現的 “流量引擎”。創客匠人結合陳雷教授的實戰經驗&#xff0c;拆解創始人 IP 從 0 到 1 的打造路徑&#xff0c;為內容創業者提供從流量引流到商業變現的全鏈路思路。 一、破局認知&#xff1a;IP 打造的核心…

【數據分析五:Feature Engineering】特征工程

一、特征工程定義 在數據預處理以后&#xff08;或者數據預處理過程中&#xff09;&#xff0c;如何從數據中提取有效的特征&#xff0c;使這些特征能夠盡可能的表達原始數據中的信息&#xff0c;使得后續建立的數據模型能達到更好的效果&#xff0c;就是特征工程所要做的工作…

標桿確立!永洪科技位于IDC報告Data Analytics領域象限排頭位!

近日&#xff0c;全球知名市場研究機構IDC發布的《數據管理分析與生成式AI發展趨勢及最佳實踐》報告&#xff0c;為正處于數字化轉型深水區的企業描繪了清晰的技術演進藍圖。在這幅權威繪制的產業圖譜中&#xff0c;“Data Analytics”&#xff08;數據分析&#xff09;作為連接…

啟動tomcat控制臺日志出現亂碼

當我們啟動tomcat控制臺日志出現亂碼怎么辦&#xff1f; 解決方案&#xff1a; 在tomcat根目錄中config文件夾下將log.properties文件中將默認控制臺日志輸出編碼UTF修改成GBK或者GB2312都可以。 java.util.logging.ConsoleHandler.encoding UTF-8 修改為&#xff1a; j…

【橘子的AI | 每日一課】Day4!機器學習 (ML) 基礎

機器學習 (ML) 基礎介紹 一、機器學習的定義 從廣義上來說&#xff0c;機器學習是一種能夠賦予機器學習的能力以此讓它完成直接編程無法完成的功能的方法。但從實踐的意義上來說&#xff0c;機器學習是一種通過利用數據&#xff0c;訓練出模型&#xff0c;然后使用模型預測的…

【C語言】藥店藥品管理系統 -丨完整源碼與實現解析

系統概述 這是一個功能完善的藥店藥品管理系統&#xff0c;使用C語言開發&#xff0c;基于鏈表數據結構實現。系統提供藥品信息的增刪改查、排序和持久化存儲功能&#xff0c;適用于藥店日常藥品管理工作。 數據結構設計 #define MAX_NAME_LEN 50 #define MAX_ID_LEN 20 #de…

sass-loader與webpack版本沖突解決方案

#npm i 錯誤解決記錄# 最開始錯誤 &#xff1a;拉取代碼&#xff0c;增加依賴時&#xff0c;報錯 問題&#xff1a; 在安裝sass-loader10.1.1時&#xff0c;發現與現有的webpack版本有沖突。 當前項目已經安裝了webpack4.28.4&#xff08;通過peer dependency requirements f…

常見誤區解讀之三:超融合只適合外圍/輕量業務場景,無法承載數據庫等關鍵業務?

作者&#xff1a;SmartX 金融團隊 祝志剛 在前兩期“超融合常見誤區解讀”中&#xff0c;我們分別解讀了如何以超融合建云并進行大規模部署。而對于生產業務場景&#xff0c;部分行業用戶和業界人士可能還會有這樣的認知&#xff1a; “超融合管理簡單、成本也低&#xff0c;…

Kafka重平衡機制深度解析:原理、觸發條件與應對策略

引言 在Kafka分布式消息系統中&#xff0c;重平衡&#xff08;Rebalance&#xff09;是一個至關重要的機制&#xff0c;它確保消費者組中的各個消費者實例能夠公平地分擔主題分區的消費任務。然而&#xff0c;重平衡過程也可能帶來短暫的消費停頓和性能波動&#xff0c;處理不…

使用 Docker Compose 安裝 Milvus(單機版)

1. 創建專用目錄并進入 mkdir milvus-standalone && cd milvus-standalone 2. 下載 docker-compose.yml 文件 使用官方提供的配置文件&#xff08;以 Milvus v2.3.3 為例&#xff09;&#xff1a; wget https://github.com/milvus-io/milvus/releases/download/v2.3…

【MySQL篇05】:事務的 ACID 性(數據庫原理篇)

文章目錄 一、事務的ACID特性二、數據庫原理例題與 ACID 特性判斷三、拓展&#xff08;undolog 與 redolog&#xff09; 一、事務的ACID特性 綜述&#xff1a; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事務是不可分割的最小操作單元&#xff0c;要么全部成功&…

crawl4ai 框架的入門講解和實戰指南——基于Python的智能爬蟲框架,集成AI(如NLP/OCR)實現自動化數據采集與處理

一、crawl4ai 框架簡介 1. 框架定位 核心功能&#xff1a;基于Python的智能爬蟲框架&#xff0c;集成AI&#xff08;如NLP/OCR&#xff09;實現自動化數據采集與處理 關鍵特性&#xff1a; 零配置快速啟動&#xff08;自動識別網頁結構&#xff09; 內置反反爬機制&#xff…

受夠垃圾翻譯!CodeBuddy 8 分鐘造神器,劃詞秒翻 + 自動適配所有網頁

本文所使用的 CodeBuddy 免費下載鏈接&#xff1a;騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 前言 作為一個天天泡在 GitHub 上扒項目的人&#xff0c;翻譯問題簡直是我 “挖寶” 路上的頭號絆腳石&#xff01;想研究國外大神的優質開源項目&#xff0c;不是被機翻軟…

零基礎設計模式——總結與進階 - 2. 反模式

第五部分&#xff1a;總結與進階 - 2. 反模式 (Anti-Patterns) 在軟件開發中&#xff0c;我們追求良好的設計模式以構建健壯、可維護的系統。然而&#xff0c;同樣存在一些常見的、導致不良后果的解決方案&#xff0c;這些被稱為“反模式”。理解反模式&#xff0c;可以幫助我…

音視頻流媒體高級開發-學習路線

原文作者&#xff1a;Linux 原文鏈接&#xff1a;音視頻流媒體高級開發-學習路線 如果你想往音視頻方向發展&#xff0c;那么本文一定要認真閱讀~ 大家都知道音視頻開發薪資高、門檻高、發展空間大&#xff0c;心里蠢蠢欲動&#xff0c;卻不知道怎么入門&#xff0c;怎么進階…