【FFmpeg】介绍+安装+VisualStudio配置FFMpeg库

文章目录

  • [1. 介绍](#1. 介绍)
  • [2. FFmpeg 安装](#2. FFmpeg 安装)
      • [2.1. windows 下安装](#2.1. windows 下安装)
      • [2.2. VS 配置 ffmpeg](#2.2. VS 配置 ffmpeg)
      • [2.3. ubuntu 安装](#2.3. ubuntu 安装)

1. 介绍

FFmpeg是一套可以用来记录、处理数字音频、视频 ,并将其转换为流开源框架,采用LPL或GPL许可证,提供了录制、转换以及流化音视频的完整解决方案。

ad-note 复制代码
它的可移植性或者说跨平台特性非常强大,Linux服务器、PC(包括Windows、Mac OS X等)、移动端设备(Android、iOS等移动设备)等平台。mpeg来自视频编码标准MPEG,前缀FF是Fast Forward的首字母缩写;

使用场景

  • 视频编码、解码和转换:FFMPEG 是一个强大的开源音视频处理库,常用于视频编解码、格式转换和流媒体处理等场景。
  • 流媒体服务:FFMPEG 支持音视频数据转换为流媒体格式,并提供了丰富的流媒体功能,适用于搭建流媒体服务器和实时流处理

GStreamer :基于管道的多媒体框架,提供了灵活的插件架构,可方便地集成各种编解码插件。
使用场景:

  1. 多媒体应用开发:GStreamer 是一个功能丰富的多媒体框架,支持音视频的捕获、处理和播放,适用于开发多媒体应用程序。
  2. 嵌入式系统:GStreamer 在嵌入式系统上有较好的应用,可以实现轻量级的音视频处理和流媒体以输。
  3. 优点:适应各种多媒体处理需求。

核心模块

  • AVFormat :负责多媒体文件的封装与解封装 ,要掌握常见封装格式 (如 MP4、FLV、MKV 、TS 等)和网络协议封装格式 (如 RTMP、RTSP、HLS 等) 。熟悉解复用流程 ,像使用avformat_open_input打开输入文件、avformat_find_stream_info获取流信息、av_read_frame读取音视频帧等接口的使用。
  • AVCodec :涵盖众多编解码格式。对于视频编码 (如 H.264、H.265 、MPEG - 4 等 )和音频编码 (如 AAC、MP3 等 ),需了解编码原理、参数设置 (如码率、帧率、分辨率等对编码质量和文件大小的影响 )。掌握编解码流程 ,包括解码器 / 编码器的初始 化(avcodec_open2 )、发送编码数据(avcodec_send_packet )、接收解码帧(avcodec_receive_frame )等操作。
  • AVFilter :提供音视频滤镜处理框架。学习视频滤镜(如裁剪、缩放、旋转、添加字幕、调色等 )和音频滤镜(如音量调整、均衡器设置等 )的使用,以及滤镜图(filtergraph )的构建和应用 。
  • AVUtil :提供基础工具函数。重点掌握内存管理函数(av_mallocav_free 等 ),以确保程序内存使用安全;了解错误处理机制(av_strerror 等 ),方便排查问题;熟悉时间戳处理、数据结构定义等内容。

常用工具

  • ffmpeg :作为核心编解码工具,掌握其基本命令格式,如ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... 。熟悉常用选项,像输入输出文件指定(-i )、音频编码设置(-acodec )、视频编码设置(-vcodec )、分辨率调整(-s )、时长控制(-t )等 。学会常见应用场景,如格式转换、音视频提取、剪辑、合并等操作的命令编写。
  • ffplay :简单媒体播放器,了解其播放控制方式,包括常用快捷键(如Space/p 播放 / 暂停、q/Esc 退出、f 全屏切换等 )。掌握其命令行选项,如指定播放起始时间(-ss )、禁止音频 / 视频播放(-an/-vn )等 。
  • ffprobe :多媒体分析工具,学会使用它获取媒体文件元数据(如编码格式、时长、分辨率、码率等 ),通过ffprobe -show_streams -show_format 文件名 等命令来分析媒体文件信息。

2. FFmpeg 安装

2.1. windows 下安装

https://www.gyan.dev/ffmpeg/builds/官网链接

  1. 解压:

    1. bin:FFmpeg 可执行文件所在的文件夹,运行 FFmpeg 的所有命令都需通过此目录下的文件
    2. doc:文档资料
    3. presets:预设的格式和编码方案
  2. 进入 bin 目录,可以看到 FFmpeg 的三个核心可执行文件:ffmpeg.exeffplay.exeffprobe.exe

  3. 配置环境变量:为了方便在命令行中直接调用 FFmpeg,需要将其添加到系统的环境变量中

  4. 如果要更改环境变量,要重启 cmd;

  5. 测试安装,显示如下表示安装成功

2.2. VS 配置 ffmpeg

  1. 创建 vs windows 项目
  2. 添加包含目录向编译器提供头文件(.h)的搜索路径;
  3. 库目录(lib) → 向链接器(Linker)提供静态库文件(.lib)的搜索路径
  4. 附加依赖项 → 明确告知链接器需要链接的具体静态库文件。
配置流程与编译链路的关系
  1. 编译阶段(Compiler)

    1. 使用 附加包含目录 中的头文件验证函数调用合法性(语法检查)。
    2. 生成目标文件(.obj),但函数地址尚未绑定(符号表中标记为未解析引用)。
  2. 链接阶段(Linker)

    1. 通过 附加库目录 定位到静态库文件。
    2. 根据 附加依赖项 中指定的库文件(avcodec.lib等),将目标文件中的未解析符号与库中的函数实现绑定。
    3. 最终生成可执行文件(.exe),其中包含FFmpeg库的二进制代码。
  3. 运行时(Runtime)

    1. 动态链接库(.dll)需通过系统路径或项目环境变量(如PATH=D:\ffmpeg\bin)加载。
错误类型 技术原因 解决方案
C1083: 无法打开头文件 头文件路径未包含或路径错误 检查附加包含目录 是否指向include 文件夹
LNK1104: 无法打开xxx.lib 库目录路径错误或文件缺失 检查附加库目录 路径和.lib 文件是否存在
LNK2019: 未解析的外部符号 未链接对应库或库版本不兼容 附加依赖项 中添加缺失的库文件名
dll 找不到问题

方法 1:将所需的动态库复制到项目可执行文件的路径,因为动态库是在运行时候加载的

方法 2:修改系统环境变量(全局生效)

通过修改PATH环境变量实现DLL全局加载,本质是利用Windows动态库搜索机制,将FFmpeg的bin目录注册为系统级资源路径。这种方法牺牲了部分安全性(如DLL劫持风险 ),但大幅提升了开发便利性,尤其适合需要长期维护多个FFmpeg项目的场景。

  1. 添加FFmpeg的bin目录到PATH
  • 按下Win + S搜索"环境变量" → 编辑系统环境变量 → 环境变量
  • 在 系统变量 中双击Path → 新建 → 输入FFmpeg的bin路径(如D:\ffmpeg\bin
  • 重启Visual Studio,所有项目运行时自动加载该路径下的DLL。
  1. 编译时链接 vs 运行时加载
  • 静态库(.lib)在编译时会被直接嵌入到最终的可执行文件中,链接器需要在编译阶段明确知道其路径和名称 3 20。
  • 环境变量(如PATH)主要用于运行时动态库(.dll)的搜索路径,而静态库无需运行时加载 12 14。
  1. 静态库的依赖关系固定性
  • 静态库的代码在编译后成为程序的一部分,其依赖关系在链接时已确定,无法通过环境变量动态调整

2.3. ubuntu 安装

复制代码
# 更新源
sudo apt update

# 添加源
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next 

# 安装ffmpeg
sudo apt-get install ffmpeg

# 查看版本
ffmpeg -version

# 查看编码器和解码器
ffmpeg -encoders

安装ffmpy

复制代码
pip install ffmpy==0.2.2   # 需要权限就添加sudo
相关推荐
珊瑚里的鱼36 分钟前
第九讲 | 模板进阶
开发语言·c++·笔记·visualstudio·学习方法·visual studio
未来之窗软件服务1 小时前
人体肢体渲染-一步几个脚印从头设计数字生命——仙盟创梦IDE
开发语言·ide·人工智能·python·pygame·仙盟创梦ide
Auspemak-Derafru1 小时前
pycharm中qthread中的run函数debug不上的问题
ide·python·pycharm
MoonBit月兔2 小时前
插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!
ide·算法·leetcode
阿海打酱油4 小时前
idea经常卡顿解决办法
java·ide·intellij-idea
dancing9995 小时前
Android Studio中Gradle 7.0上下项目配置及镜像修改
android·ide·android studio
刘洋浪子6 小时前
Android Studio中Gradle中Task列表显示不全解决方案
android·ide·android studio
程序猿多布14 小时前
使用Visual Studio将C#程序发布为.exe文件
c#·visual studio
和平宇宙21 小时前
vscode extention踩坑记
ide·vscode·编辑器