这个系列文章我们来介绍一位海外工程师如何探索 FFmpeg Basics 音视频技术,对于想要开始学习音视频技术的朋友,这些文章是份不错的入门资料,这是第 26 篇:FFmpeg 词汇表 / 关于作者。
—— 来自公众号“关键帧Keyframe”的分享
学习和提升音视频开发技术,推荐你加入我们的知识星球:【关键帧的音视频开发圈】,加入后你就能:
- 下载 30+ 个开箱即用的「音视频及渲染 Demo 源代码」
- 下载包含 500+ 知识条目的完整版「音视频知识图谱」
- 下载包含 200+ 题目的完整版「音视频面试题集锦」
- 技术和职业发展咨询 100% 得到回答
- 获得简历优化建议和大厂内推

1、4cc 或 fourcc
Fourcc(也是 FourCC – 四字符码)是媒体文件中使用的视频编解码器、压缩格式、颜色或像素格式的标识符。一个字符表示一个 1 字节(8 位)的值,因此 4cc 在文件中总是有 32 位(4 字节)。Fourcc 中的 4 个字符通常限制在 ASCII 表中的人类可读字符内,因此很容易传达媒体文件中的四个字符。AVI 文件是最普遍的,或者是第一种被广泛使用的媒体文件格式,它使用 4cc 标识符来编码用于压缩文件内各种视频 / 音频流的编解码器。一些更为人熟知的 fourcc 包括 DIVX、XVID、H264、DX50 等。在 FFmpeg 中使用 fourcc 的示例:
-vtag(或-tag:v)选项设置视频流的 fourcc 值。-atag(或-tag:a)选项设置音频流的 fourcc 值。-tag选项设置所有流的 fourcc 值。
2、长宽比
长宽比是图像或视频帧的宽度和高度之间的比率。
长宽比的种类
| 类型 | 缩写 | 描述 |
|---|---|---|
| 显示长宽比 | DAR | 显示的图像和视频的长宽比。替代名称是图像长宽比(IAR)和图片长宽比。 |
| 存储长宽比 | SAR | 图像或视频帧的长宽比取决于视频源。 |
| 像素长宽比 | PAR | 像素宽度与其高度之比,在大多数 LCD 中它是 1:1,但是一些模拟设备使用矩形像素。 |
| 原始长宽比 | OAR | 从家庭影院标准术语来说,表示视频最初创建的长宽比,许多电影具有宽长宽比。 |
| 修改长宽比 | MAR | 家庭影院标准术语,表示调整 OAR 以符合可用输出屏幕长宽比的长宽比,通常为 4:3 或 16:9。 |
DAR、SAR 和 PAR 之间的关系可以用等式表示。
在 FFmpeg 中有一个 -aspect选项可用于指定输出视频:
-aspect[:stream_specifier]
1892 年,托马斯・阿尔瓦・爱迪生和威廉・迪克森创建了一种 35 毫米宽的薄膜通用标准,其中穿孔确定了 24.89×18.67 毫米的框架尺寸,大约为 4:3 或 1.33:1 的比例。从那时起,许多长宽比被创建,其中一些将在下一个表中描述。
| 1.33:1 或者 4:3 | 原来的电影宽高比,今天广泛用于液晶显示器、电视屏幕、摄像机等。它也是 MPEG-2 压缩的标准。 |
|---|---|
| 1.618:1 | 黄金比例,FFmpeg 将其作为内置常量 PHI,其中 PHI =(1 + sqrt(5))/ 2。 |
| 1.77:1 或者 16:9(也可以 1.78:1) | 用于高清晰度电视、液晶显示器、摄像机等的宽屏标准。它是 MPEG-2 标准中的三种宽高比之一。比例 16:9 可以从 4:3 导出,其中 4^2 = 16 和 3^2 = 9。 |
| 2.2:1 或 11:5 | 50 年代开发的 70 毫米胶片标准,它也是 MPEG-2 标准的一部分,其值为 2.21:1。 |
| 2.37:1 | 2010 年推出的所谓 “21:9 电影放映” 新标准。该比率从 4:3 推导出,其中 4 3:3 3 = 64:27 = 2.37。 |
| 2.39:1 | 35 毫米胶片标准是变形的,1970 年用作 “范围” 或 Panavision 格式。蓝光光盘将此比例用作 2.4:1,并以 1920×800 的分辨率录制电影。 |
3、CIE
国际照明委员会(法国国际照明委员会 – 国际照明委员会)是关于照明、照明、色彩空间等的机构和权威机构,更多内容请参见色彩校正章节。
4、颜色深度、位深度和每像素位数
颜色深度、位深度和每像素位数是描述使用多少位来指定图像中每个像素组件的颜色属性的术语。表中列出了一些常用的颜色深度:
| 每像素位数 | 颜色数量 | FFmpeg 中可用的对应像素格式 |
|---|---|---|
| 1(黑白) | 2^1 = 2 | 单声道、单色 |
| 2(CGA) | 2^2 = 4 | 无像素格式(早期计算机中使用了 2 bpp) |
| 3 | 2^3 = 8 | 无像素格式(用于具有电视显示的早期家用电脑) |
| 4(EGA) | 2^4 = 16 | rgb4、rgb4_byte、bgr4、bgr4_byte |
| 8(VGA) | 2^8 = 256 | 灰度、pal8、bgr8、rgb8 |
| 12 | 2^12 = 4096 | yuv420p、yuv411p、yuvj420p、nv12、nv21、rgb444be、rgb444le |
| 16(高色) | 2^16 = 65,536 | yuyv422、yuv422p、yuvj422p、yuv440p、yuvj440p、rgb565be 等 |
| 24(真彩) | 2^24 = 16,777,216(我对这个数据的正确性表示怀疑。。。) | rgb24、bgr24、yuv444p、yuvj444p、gbrp、0rgb、rgb0、yuva422p 等 |
| 32(真彩 + alpha) | 24 位带 alpha 通道 | argb、rgba、abgr、bgra、yuva444p、yuv422p16be、yuv422p16le |
| 30(深色) | 2^30 = 1,073,741,824 | yuv444p10be、yuv444p10le、gbrp10be、gbrp10le |
| 36(深色) | 2^36 = 68,719,476,736 | yuva444p9be、yuva444p9le、gbrp12be、gbrp12le、yuv444p12be 等 |
| 48(深色) | 超过 280 万亿 | rgb48be、rgb48le、bgr48be、bgr48le、yuva422p16be、yuva422p16le |
5、颜色模型和颜色空间
颜色空间是从颜色模型派生而来的。色彩模型描述了可用于模拟人类视觉的方法。当这种描述如何用数字表示颜色的数学模型辅以用于解释这些数字的精确定义时,这样的一组颜色被认为是一种颜色空间。数字颜色表示通常使用 3 或 4 个组件来描述每种颜色。更精确的规格需要更大的数字。五种颜色模型被认为是主要的:CIE、CMYK、HSL/HSV、RGB 和 YUV,视频技术通常使用 RGB 和 YUV。计算机显示器使用像素来显示信息,颜色空间以像素格式实现,他们的列表在第二章中介绍。

6、色彩视觉
尽管人耳对从 16 到 20,000 赫兹频率的振动敏感,但人眼能够感知频率从大约 405 THz(740 纳米)到 789 THz(380 纳米)的电磁波。没有颜色的暗光被称为圆锥体的特殊眼睛细胞感知,并且三色视觉由棒状细胞提供。三种不同类型的棒状细胞对三种基本颜色敏感:红色、绿色和蓝色:
- L(长波)棒状细胞 – 对大约 564 到 580 纳米的波敏感 – 红色
- M(中波)棒状细胞 – 对约 534 至 545 纳米波长敏感 – 绿色
- S(短波)棒状细胞 – 对大约 420 至 440 纳米的波敏感 – 蓝色
棒状细胞的峰值灵敏度为约 498nm 的波,因此绿色感觉比红色好,甚至比蓝色更好,更多细节在隔行视频一章中。
7、DCT – 离散余弦变换
离散余弦变换用于利用有损编解码器对音频和视频数据进行压缩,从而减少多次存储的数据量。它使用一个以不同频率振荡的余弦函数和来将复信号转换为复信号。DCT 是离散傅立叶变换(DFT)的一种特殊类型,其中输入和输出采样是实数(DFT 与复数相匹配)。使用 FFmpeg 的 DCT 示例:
- 选项
-dct[stream_specifier] 为任何编解码器设置 DCT 算法 - 选项
-idct[stream_specifier] 为任何编解码器设置 DCT 实现 - 任何编解码器的标志选项值为 ildct(使用隔行 DCT)
- 任何编解码器的调试选项值为 dct_coeff
- 对于任何编解码器,
-cmp、-subcmp、-mbcmp、-ildctcmp、-skipcmp和-precmp选项中的值 dct(绝对 DCT 转换差的总和)和值 dctmax - 为任何编解码器选项
-skip_idct[stream_specifier] 选项
8、解码器
在转码过程中,解码器处理来自分路器的编码数据包,并为下一个处理步骤生成未压缩帧。从 FFmpeg 文档定义:
“解码器是 FFmpeg 中的配置元素,可以解码多媒体流。” 解码器列表可以使用以下命令显示:
9、分路器(demux)
在转码过程中,分路器(也是解复用器和解复用器)读取输入文件并生成编码数据包,发送到解码器进行解码。
从 FFmpeg 文档定义:
“分路器是 FFmpeg 中的配置元素,允许从特定类型的文件读取多媒体流。”
分路器在可用格式中列出,详细信息在第二章中。有关特定分路器的信息可以使用以下命令显示:
ffmpeg -h demuxer=demuxer_name
10、编码器
在转码过程中,编码器处理未压缩的帧,并根据选定的编解码器将它们编码为发送到复用器的数据包,通常采用某种压缩,有损或无损压缩。
FFmpeg 文档中编码器的定义:
“编码器是 FFmpeg 中的配置元素,允许编码多媒体流。”
编码器列表位于第二章中,可以使用以下命令显示:
要显示关于特定编码器的详细信息,我们可以使用以下命令:
ffmpeg -h encoder=encoder_name
11、FFmpeg 配置
原生 FFmpeg 源代码的可能性通过包含来自其他开源项目的附加软件库代码得到了改进。在使用名为 configure 的配置文件的 –enable-library 选项进行编译之前,会包含这些库。在每个控制台使用 ffmpeg 的情况下,ffplay 和 ffprobe 工具都会显示实际的 FFmpeg 配置并启用其他库,如下一个控制台输出中所示:

12、JPEG
JPEG 通常有 2 种含义:
- 联合图像专家组是移动图像专家组(MPEG)的前身。JPEG 小组成立于 1986 年,并创建了 JPEG、JPEG 2000 和 JPEG XR 标准。
- 有损压缩方法,用于图像和视频帧,压缩比为 10:1 而无明显的质量下降,它被用于许多图像格式,包括在网页和数码相机中广泛使用的 JPG 图像。
由于 JPEG 格式的有损压缩不适合多次编辑和某些技术任务。创建 JPEG 图像的段以各种标记(SOI、SOF0、SOF2、DHT 等)分隔。在编码过程中,内容被转换为 YCbCr(FFmpeg 像素格式的 YUV)色彩空间,其中 Y 表示亮度通道,Cb 和 Cr 两个色度通道。色度通道可选择降采样,每个通道被分成 8×8 块,通过类型 II 的归一化 2 维离散余弦变换(DCT)转换为频域。
在 FFmpeg 中使用 JPEG 和派生标准的示例:
mjpeg2jpeg比特流筛选器转换 MJPEG / AVI1 数据包以完成 JPEG / JFIF 数据包mjpegadump比特流过滤器用于转换为 MJPEG 文件格式- 解码器和基于 JPEG 的编码器:jpeg2000、jpegls、ljpeg、mjpeg、mjpegb(仅解码器)、nuv(RTJPEG)、sp5x(Sunplus JPEG)、adpcm_ima_smjpeg(音频,仅解码器)
- 文件格式:ingenient(原始 MJPEG,仅解码)、mjpeg、mpjpeg(MIME 多部分,仅编码)、smjpeg(Loki SDL MJPEG)
13、Macroblock
图像或视频帧到宏块的划分是使用离散余弦变换(DCT)进行编码的一部分。在 FFmpeg 中,各种 AVC 编解码器上下文选项、H.263 编码器选项、ProRes 编码器选项、libx264 选项、libxavs 选项等都使用宏块。

14、运动矢量
运动矢量根据另一图片(参考图片)中宏块的位置来表示图片中的宏块。运动矢量是视频压缩过程中运动估计的主要元素。H.264 标准的官方定义是:
用于帧间预测的二维矢量,其提供从解码图片中的坐标到参考图片中的坐标的偏移。
运动矢量在 FFmpeg 中的使用示例:
- 任何编解码器的
-flags选项中的值 mv4(在宏块(mp4)中使用四个运动矢量) - 任何编解码器的
-ec(错误隐藏策略)选项中的 guess_mvs(迭代运动矢量(MV)搜索) - 任何编解码器的调试选项中的值 mv(运动矢量)
- 任何编解码器的
-vismv[stream_specifier](可视化运动矢量)选项 - 任何编解码器的
-me_range[stream_specifier](限制运动矢量范围)选项 - 任何编解码器的
-bidir_refine选项(细化双向宏块中使用的 2 个运动向量) - 去抖滤波器使用 x、y、w 和 h 参数指定矩形区域来搜索运动矢量
15、MPEG
MPEG(发音 “em-peg”)代表 Moving Pictures Experts Group,它是由 ISO/IEC 于 1988 年建立的多媒体专家团队,负责制定音频和视频压缩和传输标准。MPEG 标准包括:
- MPEG-1
- MPEG-2
- MPEG-4
- MPEG-7
- MPEG-21
MPEG 被分成称为工作组的团队(暂且先这么翻译,原文是:MPEG is divided to the teams called working groups.)。
16、MPEG-1
该标准的官方定义是:“以高达约 1.5 Mbps 的速度为数字存储媒体编码运动图像和相关音频。”它在 1993 年进行了标准化,主要目标是编码视频和声音以存储在光盘上。MPEG-1 用于音频 CD、VCD 和可选的 SVCD 和低质量 DVD。在 MPEG-2 之前,它也被用于数字卫星和有线电视网络。该标准的一部分是流行的音频格式 MP3,MP3 是 MPEG-1 Audio Layer III 的缩写。在 ffmpeg 中,您可以使用 -f mpeg1video选项来选择此格式,例如:
ffmpeg -i input.avi -f mpeg1video output.mpg
17、MPEG-2
MPEG-2 标准的官方定义是:运动图像和相关音频信息的通用编码(ISO/IEC 13818)。这个广泛的标准于 1995 年发布,包含广播电视的传输,视频和音频规范。其压缩方案用于:
- 地面数字电视,即 ATSC、DVB 和 ISDB
- 卫星数字电视,例如 Dish Network
- 数字有线电视
- 超级视频 CD,DVD 视频和偶尔在蓝光光盘上播放
在 ffmpeg 中,您可以使用 -f mpeg2video选项来选择此格式,例如:
ffmpeg -i input.avi -f mpeg2video output.mpg
18、MPEG-4
ISO/IEC 对标准的正式定义是:“视听对象的编码”。它在 1998 年得到了标准化,其主要特点是:
- 新的编码算法 ACE(高级编码效率),与 MPEG-2 相比,其数据存储 / 带宽减少了约 11 倍
- 解码器是渲染处理器,压缩比特流描述 3D 形状和表面纹理
- 支持 MPEG-J(Java API),是定制交互式多媒体应用开发的程序的解决方案
- 支持使用专有技术管理和保护 DRM(数字版权管理)等内容的 IPMP(知识产权管理和保护)
对于带有 MP4 扩展名的输出文件,ffmpeg 会自动选择 h264 编码器和 yuv420p 像素格式。
19、复用器(mux)
在转码过程中,复用器(也是多路复用器或多路复用器)处理编码的数据包,并生成指定格式的文件。FFmpeg 文档中复用器的定义:
“复用器是 FFmpeg 中的配置元素,允许将多媒体流写入特定类型的文件。”
复用器的列表在可用格式的第二章中。要显示有关特定复用器的详细信息,我们可以使用以下命令:
ffmpeg -h muxer=muxer_name
20、像素
像素或像素来源于图像元素,并表示数字图像或视频帧的最小可控元素。像素的形状通常是正方形,但一些帧分辨率使用矩形像素。像素宽度和高度之间的比例是像素长宽比,通常缩写为 PAR。ffmpeg 包含包含 1 个、3 个或 4 个组件的像素格式,并使用以下命令显示:
21、协议
计算机术语中的术语协议通常意味着一组用于数据接收和传输的通信规则。FFmpeg 文档中协议的定义:
“协议是 FFmpeg 中的配置元素,允许访问需要使用特定协议的资源。”
可用协议列表在第二章中,可以使用以下命令显示:
协议的例子是 http(超文本传输协议)、rtmp(实时消息传输协议)、tcp(传输控制协议)、udp(用户数据报协议)等。
22、量化
数字信号的量化涉及将一系列值减小到代表性的单个值。媒体处理包括音频和视频量化,音频中量化的声音幅度和视频编码涉及颜色和频率量化。音频和视频量化都可以利用 DCT 变换。与量化相关的 ffmpeg 选项的例子:
- 任何编解码器的标记选项(归一化自适应量化)
- 任何编解码器的调试选项中的 qp(量化参数)和 vis_qp(可视化 QP)值
-trellis[stream_specifier](速率 – 失真最优量化)选项
23、采样和采样率
采样连续(模拟)信号意味着将其降低到离散信号,例如声波(图中所示)被转换为一系列采样。这些样本的数值以数字表示,这种数字形式可以保存到计算机文件中。采样率(或频率)决定了每秒采样的数量,典型的音频采样率是 8000 Hz 和 11025 Hz 的倍数。人耳灵敏度范围从 16 Hz 到 20 kHz,由于采样定理,至少需要 40 kHz 频率才能表示所有可听声音,选择 44,100 Hz 作为 CD 音频的标准。

24、视频
术语视频是在电视被发明时创建的,并且表示一种以电子形式处理运动图像的技术(与电影 – 光化学形式相比),可以包括:
- 捕获
- 记录
- 压缩
- 编码
- 解码
- 传送(广播)等。
主要的视频功能是:
- 帧率
- 长宽比
- 存储类型(模拟或数字)
- 色彩空间
- 隔行式或渐进式
- 质量(由用户感知)
- 每像素位数(色彩深度)
- 编解码器(仅数字视频)
- 3 维(3D)
视频表示以帧速率指定的快速序列投影以产生连续运动的假象的静止图像,当人眼看到连续场景时的最小帧速率大约为每秒 15 帧图像(帧)。视频来源于电影,这是一种处理运动图片的机械技术,最初是为电影和电视开发的,它使用隔行扫描来消除闪烁。FFmpeg 适用于第二章中列出的许多视频格式。一些格式能够存储多个不同的运动图像序列,并且这些序列被称为视频流;它们的编号是从零开始的,第一个流编号为 0,第二个编号为 1,等等。
25、视频过滤器
FFmpeg 中的过滤器是通过 libavfilter 库实现的。为获得最佳性能,它们通常用于过滤链(逗号分隔过滤器的说明)和过滤器图形(分号分隔的过滤链)。使用 filtergraphs 可以使用带标签的链接替换后面的 filterchains 中的输入,默认情况下会创建一个特殊的 [in] 链接标签,并表示使用 -i 选项输入的输入。将过滤器与过滤链和过滤器图组合在一起比重复处理更加优选,所述重复处理涉及由压缩算法引起的轻微变化。过滤器列表位于第 2 章中,由以下内容显示:ffmpeg -filters 视频过滤器可根据多个标准进行划分,总体分类见下表:
视频过滤器(一般分类)
| 过滤器类型 | 描述 | 示例 |
|---|---|---|
| 预过滤器 | 在编码之前使用 | 对比度调整 去闪烁 逐行扫描 降噪 缩放(缩减采样,上采样) |
| Intrafilters | 用于编码(通常是视频编解码器的一部分) | 解封装 |
| Postfilters | 解码后使用 | 解封装,逐行扫描,dering |
注意:一些像隔行扫描一样的滤镜被列入 2 类,因为输入视频流的修改取决于软件实现。
26、视频管道
视频流水线描述了从原始视频输入到显示设备上最终输出的视频帧处理过程,图中显示了一个简化的视频流水线。ffmpeg 包含 2 个特殊输入设备 dv1394 和 iec61883,可直接从数码摄像机使用的 FireWire 端口录制。

27、关于作者
Frantisek Korbel 是 Zend 认证工程师,他的工作包括编程、视频编辑和网页设计。2004 年,他创建了一个使用 Macromedia Flash 的急救基础免费软件,从那时起他经常使用动画和视频。他在 2009 年使用 Adobe AIR 开发了化学元素学习周期表。他的大部分活动都专注于志愿工作,主要用于发展中国家的教育和社区项目(非洲 – nkolfoulou.org,oyoko.org),印度(kidedu.org)等。他参加了联合国志愿工作的各种项目,由联合国开发计划署协调的 WaterWiki.net 网站设计。为了这本书,他创建了一个支持网站 ffmpeg.tv。
28、链接地址
书主页:http://ffmpeg.tv
Facebook: http://ffmpeg.tv/facebook
Twitter: http://twitter.com/FFmpeg
YouTube: http://youtube.com/FFmpegTv
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。