FFmpeg 7.1.1 | 调试 ffmpeg.c 环境 - Widows&Clion&WSL

1. 调试 ffmpeg.c 有什么意义

想要开启一段 音视频开发 的旅程,FFmpeg 将是你最具威力的武器。但是目前网上的教程都非常古老,而且很少有系统性的系列。2025 年 FFmpeg 已经来到 7.x , 但书籍、或网上的文章基本上止步于 4.x 。

一般文章能够做到 授之以鱼 就算非常不错了,但是在技术框架的大版本变动后,这些鱼也将逐渐变得腐烂、甚至毒害。我一直在思考,对于文章来说,用什么方式可以减小技术版本升级带来的负面压力。正所谓 授之以鱼,不如授之以渔

ffmpeg 命令行工具可以执行很多音视频操作,而且它就在 ffmpeg 的源码之中。只要有分析它的能力,那无论 FFmpeg 版本变到到少,你都有能力去得到最鲜活的鱼。

ffmpeg.c 是整个 FFmpeg 命令行工具的入口,也就是你每次在终端输入

ffmpeg -i input.mp4 output.mp4

这类命令时,真正开始运行的就是这个文件。调试的过程也可以顺便学会怎么在 WSL 里编译 C 项目、用 GDB 或 CLion 调试大型代码,这些都是编程开发必须掌握的技能。


2. 搭建调试环境准备

目前我是在 Windows 上基于 WSL , 通过 Clion 调试。至于 Clion、WSL 怎么安装,这里就不引申了。

操作系统 : Windows

开发IDE : CLion

工具链: WSL

  • 由于使用的是 WSL,也就是 Windows 的 Linux 子系统,所以 Macos 和 Ubuntu 等 Linux 系统的调试环境也是类似的。

[1]. 准备原材料 : 在当前目录下克隆 ffmpeg 仓库

bash 复制代码
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

[2]. 工具链准备: 在 WSL 中安装工具链

arduino 复制代码
sudo apt update
sudo apt install git build-essential yasm pkg-config libx264-dev libx265-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev gdb

然后在 Clion 中的 Settings 中,添加工具链环境。选择 WSL :

到这里我们所需的环境就准备完毕了。接下来看看如何把 ffmpeg 的源码编译为可以调试的项目。


3. 调试 ffmpeg.c

首先,打开下载的 ffmpeg 项目源码,ffmpeg.c 的代码在 fftoools 中。在同调试之前,需要在控制台 configure 一下,然后 make 来自动编译项目:

dart 复制代码
./configure --disable-optimizations --disable-stripping --enable-debug
make -j$(nproc)

然后点击 all -> Edit Configurations 配置:

可执行文件选择刚才生成的 ffmpeg_g 文件。_g 后缀通常表示"debug 版本" ,带有调试符号,未进行优化,适合用 GDB 等调试器调试。

这样,打上断点,点击调试按钮就可以愉快地调试了~


尾声

调试 ffmpeg.c 能帮助我们深入理解 FFmpeg 命令的执行流程,包括参数解析、转码调用等关键环节。通过实际调试,不仅能快速定位问题、便于二次开发,还能提升我们对大型 C 项目的掌控能力。相比单纯阅读源码,调试是一种更高效、更直观的学习方式。无论是功能定制、Bug 修复,还是提升调试工具链的使用能力,搭建调试环境都是迈向深入掌握 FFmpeg 的关键一步。

后面有时间,我会基于对 ffmpeg.c 的调试研究,分享一些音视频相关的

相关推荐
你过来啊你1 小时前
Android Handler机制与底层原理详解
android·handler
RichardLai881 小时前
Kotlin Flow:构建响应式流的现代 Kotlin 之道
android·前端·kotlin
AirDroid_cn1 小时前
iQOO手机怎样相互远程控制?其他手机可以远程控制iQOO吗?
android·智能手机·iphone·远程控制·远程控制手机·手机远程控制手机
YoungHong19922 小时前
如何在 Android Framework层面控制高通(Qualcomm)芯片的 CPU 和 GPU。
android·cpu·gpu·芯片·高通
xzkyd outpaper2 小时前
Android 事件分发机制深度解析
android·计算机八股
努力学习的小廉2 小时前
深入了解linux系统—— System V之消息队列和信号量
android·linux·开发语言
程序员江同学3 小时前
Kotlin/Native 编译流程浅析
android·kotlin
移动开发者1号4 小时前
Kotlin协程与响应式编程深度对比
android·kotlin
花花鱼13 小时前
android studio 设置让开发更加的方便,比如可以查看变量的类型,参数的名称等等
android·ide·android studio