
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 的调试研究,分享一些音视频相关的