🎬 第三章 音视频开发常用工具
📄 一句话概括

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 秒实验

  1. 在命令行里敲一次 ffmpeg -version,看它列出多少个库和版本号。
  2. 对照上面那张表,找出你认得的那几个。

常见误区

  1. 把 FFmpeg 当成一个播放器。它不负责显示,只负责处理。
  2. 以为学命令行就够了。做二次开发时用的一定是底层库。
自测三问(点开对答案) 1. FFmpeg 的六个核心库分别负责什么? —— avcodec 编解码、avformat 封装、avutil 工具、avfilter 滤镜、swscale 视频缩放、swresample 音频重采样。 2. 一句话概括 format 和 codec 的分工? —— format 管进出,codec 管压解。 3. 为什么说学 FFmpeg 的性价比高? —— 它是行业标准件,学一次就能通用于转码、切片、滤镜、封装。

相关笔记