欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 2.3 Windows Vcpkg+MSVC编译FFmpeg 4.4.1

2.3 Windows Vcpkg+MSVC编译FFmpeg 4.4.1

2025/6/18 16:59:03 来源:https://blog.csdn.net/xiaojingfirst/article/details/148688343  浏览:    关键词: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插件生成构建系统文件:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词