FFmpeg 不是一个程序,是一堆库加几个命令行工具——format 管进出、codec 管压解、filter 管加工、swscale/swresample 管换算。
前面四个工具都是【单个程序】,这一节介绍主角:FFmpeg——它不是程序,是一整套库。
一、FFmpeg 是什么
FFmpeg 是一套开源的音视频处理库与命令行工具集合。 【FF】指 Fast Forward,【mpeg】指它最早处理的 MPEG 视频标准。 它最特别的地方是:平时用的是命令行,但底层其实是一堆可被调用的库。
二、六个核心库
libavcodec:编解码——H.264、AAC 的编与解。 libavformat:封装与解封装——读写 MP4/FLV/TS。 libavutil:通用工具——内存、数学、结构体。 libavfilter:滤镜——裁剪、缩放、叠加字幕。 libswscale:视频缩放——分辨率与色彩转换。 libswresample:音频重采样——采样率与声道转换。
三、一句话记住分工
format 管进出,codec 管压解——这两句覆盖了九成日常操作。 滤镜与换算分别靠 libavfilter、libswscale、libswresample。 这个分法不是随便定的:它就对应【读进来 → 解码 → 加工 → 编码 → 写出去】这条流水线。
四、为什么它这么重要
因为它是整个音视频行业事实上的标准件:几乎所有的播放器、转码服务、直播平台都直接或间接用了它。 学它的性价比极高:一次学会,转码、切片、滤镜、封装全都通。 后面四章的内容,本质上都是在用 FFmpeg 的眼光看同一批概念。
五、动手 Demo:FFmpeg 不是一个程序,是一堆库
【FFmpeg】这个名字其实指一整套库加上几个命令行程序。
libs = [
("libavcodec", "编解码", "H.264/AAC 的编与解"),
("libavformat", "封装与解封装", "读写 MP4/FLV/TS"),
("libavutil", "通用工具", "内存、数学、结构体"),
("libavfilter", "滤镜", "裁剪、缩放、叠加字幕"),
("libswscale", "视频缩放", "分辨率与色彩转换"),
("libswresample", "音频重采样", "采样率与声道转换"),
]
for a, b, c in libs:
print("%-15s %-12s %s" % (a, b, c))
实跑输出:
--------------------------------------------------------------------
FFmpeg 不是一个程序,是一堆库
--------------------------------------------------------------------
【FFmpeg】这个名字其实指一整套库加上几个命令行程序。
库 负责什么 典型用途
--------------------------------------------------------
libavcodec 编解码 H.264/AAC 的编与解
libavformat 封装与解封装 读写 MP4/FLV/TS
libavutil 通用工具 内存、数学、结构体
libavfilter 滤镜 裁剪、缩放、叠加字幕
libswscale 视频缩放 分辨率与色彩转换
libswresample 音频重采样 采样率与声道转换
一句话记:**format 管进出,codec 管压解。**
滤镜与换算分别靠 libavfilter、libswscale、libswresample。
一句话记:format 管进出,codec 管压解。 滤镜与换算分别靠 libavfilter、libswscale、libswresample。
30 秒实验
- 在命令行里敲一次
ffmpeg -version,看它列出多少个库和版本号。 - 对照上面那张表,找出你认得的那几个。
常见误区
- 把 FFmpeg 当成一个播放器。它不负责显示,只负责处理。
- 以为学命令行就够了。做二次开发时用的一定是底层库。
自测三问(点开对答案)
1. FFmpeg 的六个核心库分别负责什么? —— avcodec 编解码、avformat 封装、avutil 工具、avfilter 滤镜、swscale 视频缩放、swresample 音频重采样。 2. 一句话概括 format 和 codec 的分工? —— format 管进出,codec 管压解。 3. 为什么说学 FFmpeg 的性价比高? —— 它是行业标准件,学一次就能通用于转码、切片、滤镜、封装。- ☐ 下一节(3.5.2 FFmpeg命令行)
相关笔记
- FFmpeg命令行 — 平时打交道的那一层
- FFmpeg开发包 — 做二次开发时用的那一层
- 音视频编码 — 它处理的核心对象
- 🎬 FFmpeg入门详解 · 索引