官网首页只有四个入口,每个入口对应一类问题。 看不懂那四个词,后面遇到「装哪个包」「为什么没这个功能」就只能瞎猜。
这是全课第一篇,先不碰命令,先把「去哪儿查」这件事定下来。 1.1.2 开始讲官网那个不太体面的页面。
一、官网首页就四个入口
ffmpeg.org 首页朴素得像个上世纪的个人主页,能点的其实只有四块:
入口 回答什么问题 本课哪一节用得上
Download 我该装哪个包、装哪一版 1.2 三系统安装 Documentation 某个参数怎么用、有没有这个功能 第三章开始每章都用 Bug Reports 报之前要先能复现,怎么给出复现步骤 1.4 常用功能 Hall of Shame 谁用了不认账 1.1.2 耻辱柱
这四个入口的顺序不是随便排的:先装、再用、再报错、最后才是维权。 新手最常犯的错是跳过第一个直接进第二个—— 装了一个残缺的构建,然后拿着文档查为什么参数不生效。
二、Documentation 那一页到底有多大
ffmpeg.org/documentation.html 底下挂着几份文档,最厚的两份是:
文档 厚度 什么时候翻它
ffmpeg.html 单页最长 只想查某个参数怎么用 ffmpeg-all.html 更大 连滤镜、编解码器、格式一起查 ffmpeg-filters.html 单独一份 查滤镜参数,第六章起天天用 ffprobe.html 较短 查它输出什么字段 ffplay.html 最短 查播放器快捷键
注意 ffmpeg-all 那一份:它不是「更全的 ffmpeg.html」, 而是把三个工具、所有滤镜、所有编解码器的说明拼在一起。 所以搜参数时用浏览器在 ffmpeg-all 里搜,命中率最高。
这些 HTML 在装好的机器上也有一份:源码目录 doc/ 下能 make 出来, 官方发行包里通常也带。断网时看本地那份就行。
三、三个命令,三种问法
命令行自己就能回答大部分「有没有」的问题,不用翻网页:
你想知道 敲什么 输出有多长
这个构建是哪一版 ffmpeg -version 两三行,含编译开关 认不认某种格式 ffmpeg -formats 几百行 有没有某个编码器 ffmpeg -encoders 几百行 有没有某个滤镜 ffmpeg -filters 几百行 某个参数什么意思 ffmpeg -h full 最长,建议重定向到文件
这五条里,第一条的信息量最大。它那一行 configuration 就是「这个构建的全家福」: 带没带 x264、带没带 freetype、是不是 GPL,全写在上面。
所以装完之后第一件事不是转个文件试试,是敲 ffmpeg -version 看一眼。 这一眼能省掉后面半小时的「为什么这个参数不认」。
四、版本号是有代际的
FFmpeg 的版本号有两套,混着看容易晕:
看到什么 是什么 在哪儿看到
ffmpeg version 8.0 发行版号,一看就懂 -version 第一行 libavcodec 62 库的接口版本,换代才涨 -version 后面几行 8.0.1 同一发行版里的小修 发行包文件名 git-2024xxxx 从源码编的,没有发行号 -version 第一行
发行版号涨得不快,可库的接口版本涨得慢得多—— libavcodec 从 58 走到 62 用了好几年。
记住一个用法就够了:看到教程说「这个参数 5.0 起才有」, 就去 -version 里找 libavcodec 的主版本,5.0 对应 59。 低于 59 就是没有,别在那儿试。
五、动手 Demo:七个库的版本号,本机是哪一个
沙箱里没有 ffmpeg.exe,但有 PyAV 绑定的同一套 libav*。 所以下面这些版本号是真的,只是通过 Python 拿到的。
import av
import av.filter
for k, v in sorted(av.library_versions.items()):
print(u"%-14s %s" % (k, u".".join(str(x) for x in v)))
print(u"formats", len(av.formats_available))
print(u"codecs ", len(av.codecs_available))
print(u"filters", len(av.filter.filters_available))
实跑输出:
--------------------------------------------------------------------
FFmpeg 官网介绍——七个库的版本号,本机是哪一个
--------------------------------------------------------------------
**① 官网 Download 页列的不是一个版本号,是七个库各自的版本号**
库 版本 tuple 主版本 管什么
-------------------------------------------------------------------------------------
libavcodec 62.28.102 62 编解码器总库,五百多个 codec 全在这儿
libavdevice 62.3.102 62 采集设备,摄像头与声卡
libavfilter 11.14.102 11 滤镜,四百多个都在这一层
libavformat 62.12.102 62 封装与解封装,认得出 mp4、flv、ts
libavutil 60.26.102 60 公共底座,内存、数学、像素格式
libswresample 6.3.102 6 音频重采样
libswscale 9.5.102 9 像素格式转换与缩放
**这七行不是七种版本,是同一份源码里七个模块各自的编号。**
**它们并不齐步走:codec 与 format 都是 62,可 filter 只有 11、swscale 只有 9。**
**每个库自己记自己的接口变更次数,改得多就涨得快。**
**② 拿 libavcodec 的主版本回查,就能知道你装的是哪一代 FFmpeg**
libavcodec 主版本 对应发行版
------------------------------------------
62 FFmpeg 8.0 系
61 FFmpeg 7.0 / 7.1
60 FFmpeg 6.0 / 6.1
59 FFmpeg 5.0 / 5.1
58 FFmpeg 4.0 ~ 4.4
57 FFmpeg 3.0 ~ 3.4
**本机 libavcodec 是 62,所以它相当于 FFmpeg 8.0 系。**
**③ 官网 Documentation 页那张大表,条数在这里能数出来**
计数器 本机条数 对应的官网命令
---------------------------------------------
封装格式 414 ffmpeg -formats
编解码器 557 ffmpeg -codecs
滤镜 468 ffmpeg -filters
**这三个数就是官网文档 ffmpeg-all.html 的目录规模。**
**一个命令行工具能认识 414 种封装、557 种编解码器,靠的不是它自己,是这七个库。**
**④ 首页那四个入口,正好对应本章剩下的四节**
官网入口 讲什么 本章哪一节
---------------------------------------------------------------
Download 七个库、三个工具,装哪个 1.2 安装
Documentation 上面那三张表 1.3 项目组成
Bug Reports 报之前得先说清怎么复现 1.4 常用功能
Hall of Shame 用了不认账,被挂出来 1.1.2 耻辱柱
看第一张表:七个库的主版本号并不齐步走。 codec 与 format 都是 62,可 filter 只有 11、swscale 只有 9。 每个库自己记自己的接口变更次数,改得多就涨得快。
第二张表是个对照尺:拿 libavcodec 的主版本回查,就知道这是哪一代。 本机是 62,落在 FFmpeg 8.0 那一档。
第三张表那三个数,就是官网 Documentation 的目录规模: 414 种格式、557 个编解码器、468 个滤镜。 一个命令行工具能认识这么多东西,靠的不是它自己,是上面那七个库。
最后一个表把官网四个入口和本章四节对应起来了。 这不是凑数——官网那四块本来就是按「你会遇到的四类问题」分的。
30 秒实验
- 查代际:在自己的机器上敲
ffmpeg -version,找到 libavcodec 后面那个数字,回本文的表里对一下是哪一代。 - 数条数:敲
ffmpeg -filters | wc -l(Linux/Mac)或ffmpeg -filters | find /c /v ""(Windows),看跟本文的 468 差多少。差得多就说明构建被裁过。 - 找编译开关:把
-version第二行复制到记事本里,数一数有几个--enable-,那就是这个构建开了多少功能。
常见误区
- 把「FFmpeg 版本」当成一个数。它至少是三层:发行版号、库接口版本、小修号。问「你用的哪个版本」时,能说出
-version第一行才是有效回答。 - 以为官网文档写的功能一定能用。文档描述的是源码能力,你的构建能不能用,取决于 configure 时开了什么。文档说有的参数,
-h full里查不到就是没有。 - 拿到别人的命令就直接跑。同一条命令在 5.0 和 8.0 上参数名可能已经变了。先看
-version,再看命令,这个顺序不能反。
自测三问(点开对答案)
1. 官网首页四个入口里,哪一个能回答「我这个构建为什么没有 drawtext」? —— 都不是直接的答案,但最接近的是 Documentation——查文档确认这个滤镜存在,再用 `-filters` 确认自己的构建没编它。真正的答案是 `-version` 第二行的编译开关。 2. libavcodec 的主版本号是 59,大概对应哪一代 FFmpeg? —— FFmpeg 5.0 / 5.1。这个对照不是官方强制的,但实践中一直很稳,可以当尺子用。 3. 为什么七个库的版本号不是一起涨的? —— 每个库单独维护自己的接口版本,只有接口发生不兼容变更时才涨主版本。libavfilter 改动少,所以主版本只有 11;libavcodec 加了大量新编码器,所以到了 62。- ☐ (本节完,下一节 1.1.2 FFmpeg 耻辱柱)