【FFmpeg】介绍+安装+VisualStudio配置FFMpeg库
文章目录
- 1. 介绍
- 2. FFmpeg 安装
- 2.1. windows 下安装
- 2.2. VS 配置 ffmpeg
- 配置流程与编译链路的关系
- dll 找不到问题
- 2.3. ubuntu 安装
1. 介绍
FFmpeg是一套可以用来记录、处理数字音频、视频,并将其转换为流的开源框架,采用LPL或GPL许可证,提供了录制、转换以及流化音视频的完整解决方案。
它的可移植性或者说跨平台特性非常强大,Linux服务器、PC(包括Windows、Mac OS X等)、移动端设备(Android、iOS等移动设备)等平台。mpeg来自视频编码标准MPEG,前缀FF是Fast Forward的首字母缩写;
使用场景:
- 视频编码、解码和转换:FFMPEG 是一个强大的开源音视频处理库,常用于视频编解码、格式转换和流媒体处理等场景。
- 流媒体服务:FFMPEG 支持音视频数据转换为流媒体格式,并提供了丰富的流媒体功能,适用于搭建流媒体服务器和实时流处理
GStreamer:基于管道的多媒体框架,提供了灵活的插件架构,可方便地集成各种编解码插件。
使用场景:
- 多媒体应用开发:GStreamer 是一个功能丰富的多媒体框架,支持音视频的捕获、处理和播放,适用于开发多媒体应用程序。
- 嵌入式系统:GStreamer 在嵌入式系统上有较好的应用,可以实现轻量级的音视频处理和流媒体以输。
- 优点:适应各种多媒体处理需求。
核心模块
- 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_malloc
、av_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/官网链接
-
-
-
解压:
bin
:FFmpeg 可执行文件所在的文件夹,运行 FFmpeg 的所有命令都需通过此目录下的文件doc
:文档资料presets
:预设的格式和编码方案
-
进入
bin
目录,可以看到 FFmpeg 的三个核心可执行文件:ffmpeg.exe
、ffplay.exe
、ffprobe.exe
-
配置环境变量:为了方便在命令行中直接调用 FFmpeg,需要将其添加到系统的环境变量中
-
-
如果要更改环境变量,要重启 cmd;
-
测试安装,显示如下表示安装成功
-
2.2. VS 配置 ffmpeg
- 创建 vs windows 项目
- 添加包含目录;向编译器提供头文件(.h)的搜索路径;
- 库目录(lib) → 向链接器(Linker)提供静态库文件(.lib)的搜索路径
- 附加依赖项 → 明确告知链接器需要链接的具体静态库文件。
配置流程与编译链路的关系
-
编译阶段(Compiler)
- 使用 附加包含目录 中的头文件验证函数调用合法性(语法检查)。
- 生成目标文件(
.obj
),但函数地址尚未绑定(符号表中标记为未解析引用)。
-
链接阶段(Linker)
- 通过 附加库目录 定位到静态库文件。
- 根据 附加依赖项 中指定的库文件(
avcodec.lib
等),将目标文件中的未解析符号与库中的函数实现绑定。 - 最终生成可执行文件(
.exe
),其中包含FFmpeg库的二进制代码。
-
运行时(Runtime)
- 动态链接库(
.dll
)需通过系统路径或项目环境变量(如PATH=D:\ffmpeg\bin
)加载。
- 动态链接库(
错误类型 | 技术原因 | 解决方案 |
C1083: 无法打开头文件 | 头文件路径未包含或路径错误 | 检查附加包含目录 是否指向 include 文件夹 |
LNK1104: 无法打开xxx.lib | 库目录路径错误或文件缺失 | 检查附加库目录 路径和 .lib 文件是否存在 |
LNK2019: 未解析的外部符号 | 未链接对应库或库版本不兼容 | 在附加依赖项 中添加缺失的库文件名 |
dll 找不到问题
方法 1:将所需的动态库复制到项目可执行文件的路径,因为动态库是在运行时候加载的
方法 2:修改系统环境变量(全局生效)
通过修改PATH环境变量实现DLL全局加载,本质是利用Windows动态库搜索机制,将FFmpeg的bin目录注册为系统级资源路径。这种方法牺牲了部分安全性(如DLL劫持风险 ),但大幅提升了开发便利性,尤其适合需要长期维护多个FFmpeg项目的场景。
- 添加FFmpeg的
bin
目录到PATH
- 按下
Win + S
搜索“环境变量” → 编辑系统环境变量 → 环境变量 - 在 系统变量 中双击
Path
→ 新建 → 输入FFmpeg的bin
路径(如D:\ffmpeg\bin
) - 重启Visual Studio,所有项目运行时自动加载该路径下的DLL。
- 编译时链接 vs 运行时加载
- 静态库(
.lib
)在编译时会被直接嵌入到最终的可执行文件中,链接器需要在编译阶段明确知道其路径和名称 3 20。 - 环境变量(如
PATH
)主要用于运行时动态库(.dll
)的搜索路径,而静态库无需运行时加载 12 14。
- 静态库的依赖关系固定性
- 静态库的代码在编译后成为程序的一部分,其依赖关系在链接时已确定,无法通过环境变量动态调整
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