当前位置: 首页 > news >正文

【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:基于管道的多媒体框架,提供了灵活的插件架构,可方便地集成各种编解码插件。
使用场景:

  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

相关文章:

  • 谷歌web第三方登录
  • .NET NativeAOT 指南
  • 鸿蒙OSUniApp打造多功能图表展示组件 #三方框架 #Uniapp
  • Java 重试机制详解
  • 鸿蒙OSUniApp 实现的二维码扫描与生成组件#三方框架 #Uniapp
  • 1688 平台 API 接口深度解析:高效获取商品详情数据的开发实践
  • 国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)
  • LLaMA-Factory 微调 Qwen2-7B-Instruct
  • 【vim】--- vim 插件说明 超详细持续更新中
  • 车载网关--- 职责边界划分与功能解耦设计
  • JVM 精华
  • ChatGPT 能“记住上文”的原因
  • Awesome WM自定义菜单实现nas共享目录挂载
  • ClickHouse详解
  • ElasticSearch重启之后shard未分配问题的解决
  • Rocky Linux 9.5 基于kubeadm部署k8s
  • 微信小程序智能商城系统(uniapp+Springboot后端+vue管理端)
  • 安全扫描之 Linux 杀毒软件 Clamav 安装
  • 查询电脑伪装IP,网络安全速查攻略!
  • 代码随想录 算法训练 Day1:数组
  • 微软宣布全球裁员约3%:涉及约6000人,侧重经理层
  • 公元1058年:柳永词为什么时好时坏?
  • 京东回应外卖系统崩溃:订单暴涨所致,已恢复
  • 俄土外长通话讨论俄乌谈判问题
  • 通辽警方侦破一起积压21年的命案:嫌疑人企图强奸遭反抗后杀人
  • 北美票房|昔日偶像风光不再,乔什·哈内特新片开画不佳