一、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;怎么进阶…