VS2022配置FFMPEG库基础教程

【FFmpeg问题】windows 配置visual studio 2022 FFmpeg 开发环境详细步骤 path(空格)=路径、path=(空格)路径、path(空格)=(空格)路径等写法都会导致dll引用失败。将项目使用到的 FFmpeg 的dll文件复制到项目下的 Debug目录 和 Release目录;一些几年前的文档显示FFmpeg下载有三个选项:static,shared,dev。在附加包含目录设置FFmpeg的include目录的路径,相对路径和绝对路径都可以。**第二步:**链接器->输入->附加的依赖项,将相关lib文件名添加进去即可。**第一步:**链接器->常规->附加库目录。 阅读详情
AI摘要

本文是关于如何在VS2022中配置FFMPEG库的基础教程。首先介绍了FFMPEG的起源、发展历程和核心功能,然后详细说明了下载和环境配置的步骤,包括解压安装包、新建工程、配置头文件、库文件和二进制文件,最后通过读取mp4文件并用OpenCV显示来验证配置是否成功。

1 简介

在这里插入图片描述

1.1 起源与发展历程

FFmpeg诞生于2000年,由法国工程师Fabrice Bellard主导开发,其名称源自"Fast Forward MPEG",初期定位为多媒体编解码工具。2004年后由Michael Niedermayer接任维护,逐步发展成为包含音视频采集、格式转换、流媒体处理等完整功能的开源项目。经过25年迭代,当前最新7.x版本已支持H.266/VVC、AV1等新一代编码标准,在全球开发者社区贡献下形成包含7大核心库的生态系统。

1.2 核心功能与架构组成

该工具链以libavcodec编解码库为核心,涵盖libavformat(封装格式处理)、libswscale(图像缩放、颜色空间转化等)、libavfilter(滤镜系统)等模块,支持200+种媒体格式的相互转化。其命令行工具集可执行视频剪辑、帧率调整、硬件加速转码等操作,广泛应用于直播推流、视频会议、智能安防等领域。通过LGPL/GPL协议保障开源生态,已成为VLC、Blender等知名软件的基础依赖组件。

2 下载

为了避免复杂的编译过程,达到快速上手使用的目的,我们推荐使用官方预编译包。下载地址:官网
在这里插入图片描述
在这里插入图片描述

注意,一定选择含share字符的编译包。

3 VS2022开发FFMPEG的环境配置

FFMPEG作为一个标准的第三方库,其配置思路是与OpenCV、OpenVINO等是一样的。在工程里面,配置好头文件路径、库文件路径和名称以及二进制文件的路径。下面,我实际演示下如何一步步进行配置。

3.1 解压安装包

将下载的压缩包,解压至无中文路径的目录中,我把它解压在D:/Tool目录下。
在这里插入图片描述
可以大致看下,FFMPEG的目录结构:

  • bin:二进制文件目录。
  • doc:使用帮助文档。
  • include:头文件。
  • lib:库文件。
  • presets:一些标准分辨率的vpx的预设文件。

3.2 新建工程

使用VS2022新建控制台工程,空项目即可。
在这里插入图片描述

3.3 配置头文件

右键项目 →属性→VC++ 目录,包含目录增加D:\Tool\ffmpeg-7.1-full_build-shared\include。
在这里插入图片描述

3.4 配置库文件

右键项目 →属性→VC++ 目录,库目录增加D:\Tool\ffmpeg-7.1-full_build-shared\lib。
在这里插入图片描述
配置库名称:
在这里插入图片描述

3.5 配置二进制文件

建议直接使用环境变量进行配置,方便省事。
在这里插入图片描述

3.6 环境测试

#include <iostream>
extern "C" {
#include <libavcodec/avcodec.h>
}

int main() {
    std::cout << "FFmpeg版本: " << avcodec_version() << std::endl;
    return 0;
}

4、读取mp4文件,opencv显示。

为验证FFMPEG的环境是否彻底安装完成,我们采用一个小的例子程序,进行验证。读取一个mp4文件,使用FFMPEG进行格式解析,并转为RGB格式,使用opencv进行显示。

#include <iostream>
#include <opencv2/opencv.hpp>

extern "C" {
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
}

int main() {
    // FFmpeg初始化
    avformat_network_init();
    AVFormatContext* fmt_ctx = nullptr;
    
    // 打开媒体文件(替换为你的MP4路径)
    const char* filename = "input.mp4";
    if(avformat_open_input(&fmt_ctx, filename, nullptr, nullptr) != 0) {
        std::cerr << "无法打开文件" << std::endl;
        return -1;
    }

    // 查找视频流信息
    if(avformat_find_stream_info(fmt_ctx, nullptr) < 0) {
        std::cerr << "无法获取流信息" << std::endl;
        avformat_close_input(&fmt_ctx);
        return -1;
    }

    // 定位视频流
    int video_stream = -1;
    AVCodecParameters* codec_par = nullptr;
    for(int i = 0; i < fmt_ctx->nb_streams; i++) {
        if(fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
            video_stream = i;
            codec_par = fmt_ctx->streams[i]->codecpar;
            break;
        }
    }

    if(video_stream == -1) {
        std::cerr << "未找到视频流" << std::endl;
        avformat_close_input(&fmt_ctx);
        return -1;
    }

    // 获取解码器
    const AVCodec* codec = avcodec_find_decoder(codec_par->codec_id);
    if(!codec) {
        std::cerr << "不支持的解码器" << std::endl;
        avformat_close_input(&fmt_ctx);
        return -1;
    }

    // 创建解码上下文
    AVCodecContext* codec_ctx = avcodec_alloc_context3(codec);
    avcodec_parameters_to_context(codec_ctx, codec_par);
    if(avcodec_open2(codec_ctx, codec, nullptr) < 0) {
        std::cerr << "无法打开解码器" << std::endl;
        avcodec_free_context(&codec_ctx);
        avformat_close_input(&fmt_ctx);
        return -1;
    }

    // 初始化SWS转换上下文
    SwsContext* sws_ctx = sws_getContext(
        codec_ctx->width, codec_ctx->height, codec_ctx->pix_fmt,
        codec_ctx->width, codec_ctx->height, AV_PIX_FMT_RGB24,
        SWS_BILINEAR, nullptr, nullptr, nullptr);

    // 分配帧内存
    AVFrame* frame = av_frame_alloc();
    AVFrame* rgb_frame = av_frame_alloc();
    int buffer_size = av_image_get_buffer_size(AV_PIX_FMT_RGB24, codec_ctx->width, codec_ctx->height, 1);
    uint8_t* buffer = (uint8_t*)av_malloc(buffer_size);
    av_image_fill_arrays(rgb_frame->data, rgb_frame->linesize, buffer,
                        AV_PIX_FMT_RGB24, codec_ctx->width, codec_ctx->height, 1);

    AVPacket* pkt = av_packet_alloc();
    cv::namedWindow("Video", cv::WINDOW_AUTOSIZE);

    // 主解码循环
    while(av_read_frame(fmt_ctx, pkt) >= 0) {
        if(pkt->stream_index == video_stream) {
            int ret = avcodec_send_packet(codec_ctx, pkt);
            if(ret < 0) continue;

            while(ret >= 0) {
                ret = avcodec_receive_frame(codec_ctx, frame);
                if(ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) break;
                if(ret < 0) {
                    std::cerr << "解码错误" << std::endl;
                    break;
                }

                // 转换颜色空间
                sws_scale(sws_ctx, 
                         frame->data, frame->linesize, 0, 
                         codec_ctx->height,
                         rgb_frame->data, rgb_frame->linesize);

                // 创建OpenCV Mat并显示
                cv::Mat img(codec_ctx->height, codec_ctx->width,
                           CV_8UC3, rgb_frame->data);
                cv::imshow("Video", img);
                if(cv::waitKey(25) == 27) break; // ESC退出
            }
        }
        av_packet_unref(pkt);
    }

    // 清理资源
    av_free(buffer);
    av_frame_free(&frame);
    av_frame_free(&rgb_frame);
    av_packet_free(&pkt);
    sws_freeContext(sws_ctx);
    avcodec_free_context(&codec_ctx);
    avformat_close_input(&fmt_ctx);
    cv::destroyAllWindows();
    
    return 0;
}

程序说明

  • ‌FFmpeg初始化‌

    使用avformat_open_input打开媒体文件
    通过avformat_find_stream_info获取流信息

  • ‌视频流处理‌

    定位视频流索引
    创建解码器上下文并打开

  • ‌颜色空间转换‌
    使用sws_getContext初始化转换上下文
    将原始帧转换为RGB24格式

  • ‌OpenCV显示‌
    将转换后的RGB数据包装为cv::Mat
    使用imshow显示视频帧

5 小结

VS2022配置FFMPEG库,在使用预编译包的情况下,没有特殊需要注意的,按照常规的第三方库配置思路进行配置即可。

FFmpeg和vs2022开发环境配置 FFmpeg和VS2022配置开发环境 阅读详情

相关推荐

VS下搭建FFmpeg开发环境

目录1.下载ffmpeg2.创建一个VS控制台项目3.配置VS4.测试环境 1.下载ffmpeg 进入 ffmpeg下载官网 下载 解压之后就会看见include文件夹,lib文件夹,bin文件夹(里面是dll文件) 2.创建一个VS控制台项目 将下载的include文件夹,lib文件夹,和bin文件夹下的所有dll文件复制到项目文件夹下 3.配置VS • 打开属性面板 解决方案资源管理器->右键单击项目->属性 • 头文件配置 配置属性->C/C+±>常规->附加包含

qq_46470984的博客 1578

FFmpeg 4.3 音视频基础到工程应用

课程介绍1课程面向音视频行业的入门者,没有太多音视频基础或者是音视频零基础的同学2课程通过概念分析、代码试验、项目实战的方式当你真正理解音视频3提供直播答疑和学员作业代码评审,提升学员的代码能力4包含视频封装、编解码(H264、 H265、 硬件加速)、像素格式转换、视频渲染5实现接入多路RTSP网络摄像头,预览多路视频并完成硬盘录像机自动录制功能   

Windows下FFmpeg开发避坑指南:从VS2022环境配置到解决LNK2019链接错误

本文详细介绍了在Windows平台下使用VS2022配置FFmpeg开发环境的完整指南,包括预编译包选择、VS2022项目配置、典型链接错误(如LNK2019)的解决方案以及实战调试技巧。帮助开发者避开常见陷阱,提升开发效率。

weixin_30832143的博客 481

VS2022编译调试FFmpeg

vs2022编译,调式ffmpeg环境搭建详细说明,帮助大家学习音视频流媒体相关技术

huayizaisheng的专栏 3443

Windows下FFmpeg+C++开发环境搭建避坑指南(VS2022+Qt6.7.3实战)

本文详细指导在Windows平台下使用Visual Studio 2022和Qt6.7.3搭建FFmpeg+C++开发环境,涵盖环境配置、库获取验证、项目设置及常见问题解决方案。重点解析音视频处理中的关键配置步骤和调试技巧,帮助开发者高效构建多媒体应用并避开常见陷阱。

weixin_29001423的博客 210

FFmpeg 7.1 源码在 VS2022 中编译:从依赖缺失到调试成功的完整避坑指南

本文详细介绍了在VS2022中编译FFmpeg 7.1源码的完整流程,包括环境准备、依赖库下载、工程配置及常见错误解决方案。特别针对Windows平台下的编译难点,如依赖缺失、路径配置和调试参数设置等,提供了实用的避坑指南,帮助开发者顺利完成FFmpeg的编译与调试工作。

weixin_30776273的博客 434

Visual Studio 2022配置OpenCV455+CMake(Win11)

Visual Studio 2022配置OpenCV455+CMake(Win11)1 下载1.1 OpenCV下载1.2 CMake下载2 CMake编译3 遇到的警告及解决方案3.1 ippicv无法下载3.2 ffmpeg无法下载3.3 wechat_qrcode无法下载4 Visual Studio编译5 环境配置6 测试7 其他记录下CMake配置过程。1 下载1.1 OpenCV下载。

weixin_46575013的博客 846

vcpkg 管理 FFmpeg 6.1.6:Windows 10/11 一键安装与 3 大 IDE 集成指南

本文详细介绍了如何使用vcpkg包管理器在Windows 10/11系统上快速安装和配置FFmpeg 6.1.6,并集成到Visual Studio 2022、VS Code和CLion三大主流开发环境中。通过自动化部署和灵活的配置选项,开发者可以高效搭建音视频开发环境,提升编译和调试效率。

weixin_34391445的博客 448

windows源码安装HeartMuLa/heartlib及报错解决

而 NumPy 2.0.2 可能还没有为这个 Python 版本提供预编译的 wheel 文件(我的需要安装0.8,之前默认安装了0.10,然后我的torch是2.9所以不兼容。这是由于ffmpeg不是shared版本,缺少相应的ddl,所以又去下载解压。然后仔细查看错误是由于torchcodec版本和PyTorch不兼容。我安装过VS2022,所以直接VS里打开命令行进行安装。,或者虽然安装了但环境变量配置不正确,导致。你的 Windows 系统上没有安装。),因此 pip 尝试从源码编译。

wang6421453的专栏 521

C++与FFmpeg SDK实战:从零构建MP4到AVI转换工具

本文详细介绍了如何使用C++和FFmpeg SDK从零构建一个MP4到AVI的视频格式转换工具。通过实战项目,深入解析了视频解封装、解码、编码与再封装的核心流程,并重点讲解了FFmpeg关键数据结构的内存管理、时间戳处理等开发要点,帮助开发者掌握音视频处理的底层原理与高效开发技能。

weixin_29231725的博客 184

FFmpeg 与 C++ 实战音视频处理:从环境搭建到流媒体解析

本文详细介绍了如何使用FFmpeg与C++进行音视频处理,从环境搭建到流媒体解析的全流程实战。内容包括FFmpeg与C++的组合优势、Windows平台环境配置、解封装流程深度解析以及常见问题排查与性能优化技巧,帮助开发者高效处理音视频数据。

weixin_42552410的博客 248

Febio Studio 编译

FebioStudio怎么编译,开源代码大项目如何编译,各组件、小包怎么下载,路径在哪里。CMake怎么下载怎么安装。

qq_65364446的博客 2263

win10环境下msys+vs2022编译ffmpeg6.1

本文是在windows10,msys2+vs2022的环境下,编译ffmpeg6.1。

pinghe2024的博客 1092

FFmpeg编译安装(windows环境)以及在vs2022中调用

把ffmpeg和x264的源码解压到msys路径下的home路径下的名字为你的电脑用户名的看路径下,再新建俩空文件夹,用来安装ffmpeg和x264。这是从官网的github源码里嫖的,大致三个月前更新的,换成这个之后就可以安心编译了。接下来可以把mingw的bin目录配置到环境变量(自行操作),注意是msys文件夹里面的mingw,一开始应该是空的,在我们下载好上面的工具之后就会看到有东西。接着就可以下载一些待会用到的依赖。至此,编译安装工作就完成了,后续如果需要安装别的扩展格式,再配置编译就可以了。

weixin_58320200的博客 3269

基于ShiftMediaProject使用vs2022编译调试ffmpeg

在windows下使用vs2022编译调试ffmpeg

去规划局 920

FFmpeg Dev版64位安装配置与开发集成避坑指南

FFmpeg作为开源音视频处理领域的工业级工具,其Windows下的版本选择直接影响开发效率。面对Full、Essentials、Dev、Shared等不同构建,开发者常困惑于Dev版与64位版的定位:Dev版不提供ffmpeg.exe,而是包含头文件和链接库,专供二次开发;64位则拥有更大的内存寻址能力,适配现代视频处理链路。从工具链联调出发,Qt环境下msvc2022 64工具链的识别、ZLMediaKit编译时FFMPEG_LIB_DIRS的配置,再到转码、截图、滤镜、合并等高频命令的细节,以及Nod

weixin_28834765的博客 259

VS2022搭建FFMPEG + Opencv开发环境 + 如何打包项目让程序也能独立跑在其他人的电脑上?

详细介绍了,VS下搭建FFMPEG、OpenCV开发环境,以及打包的方式。

m0_52566365的博客 1864

秦时明月6.2魔改版_从零到一部署指南_含安卓客户端配置与GM后台直通

本文提供《秦时明月》6.2魔改版从零开始的完整部署指南。详细讲解CentOS服务器环境准备、服务端文件部署与安装、关键端口开放及进程验证。重点涵盖安卓客户端APK的IP修改与重签名方法,并介绍了GM后台工具的访问与使用,助你快速搭建并管理专属游戏服务器。

garlic的博客 310

FFmpeg+CMake+VS2022下载安装与配置

我们没必要自己编译, github提供了编译好后需要的动态库、静态库还有头文件, 搞过几个库这算是导入最简单错误最少的库之一了, 有的库还需要自己编译折磨死人了!

qq_45777630的博客 1241

当知识图谱遇见多模态:突破文本界限的智能认知革命

本文探讨了知识图谱与多模态技术的融合,揭示了其在医疗诊断、文化保护等领域的革命性应用。通过图神经网络、对比学习框架和跨模态注意力机制等技术,实现了文本、图像和音频数据的智能关联与认知。文章还分享了在Neo4j等图数据库中的实践案例和优化策略,为构建下一代智能认知系统提供了技术参考。

weixin_29197835的博客 461

Cortex-M内核DWT周期计数器:从原理到STM32实战时间测量与性能分析

在嵌入式开发中,代码执行耗时测量是性能优化的基础。除了依赖外设定时器或SysTick,ARM Cortex-M3/M4/M7内核自带的DWT(Data Watchpoint and Tracker)调试组件提供了一种极低侵入性的硬件计时方案。其内部的32位周期计数器CYCCNT跟随内核时钟递增,无需占用额外引脚或定时器资源,即可实现纳秒级分辨率的函数耗时测量、中断响应分析及延时实现。从DWT寄存器配置、周期差值计算到基于SystemCoreClock的微秒换算,开发者可以快速搭建一套轻量级性能分析工具。本文

weixin_34216614的博客 183
上一篇: Eigen3开发入门指南:矩阵操作与核心功能详解
下一篇: FFmpeg视频处理入门级教程
深图智能
博客等级 码龄3年 1036粉丝 91原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深图智能

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值