写在前面
如果您对音视频技术感兴趣,可以订阅我的专题:音视频专辑
也可以关注我的账户: 张芳涛,我后期会发布更多的音视频以及图像处理方面的文章。
正文
4cc 或者 fourcc
fourcc(也是FourCC - 四字符码)是媒体文件中使用的视频编解码器,压缩格式,颜色或像素格式的标识符。 一个字符表示一个1字节(8位)的值,所以4cc在文件中总是有32位(4字节)。 fourcc中的4个字符通常限制在ASCII表格中的人类可读字符内,因此很容易传达和传达媒体文件中的四个字符。 AVI文件是最普遍的,或者是第一种被广泛使用的媒体文件格式,它使用4cc标识符来编码用于压缩文件内各种视频/音频流的编解码器。 一些更为人熟知的fourccs包括DIVX,XVID,H264,DX50等。在FFmpeg中使用fourcc的示例:
- -vtag(或-tag:v)选项设置视频流的fourcc值
- -atag(或-tag:a)选项设置音频流的fourcc值
- -tag选项设置所有流的fourcc值
长宽比
长宽比是图像或视频帧的宽度和高度之间的比率。
长宽比的种类
类型 | 缩写 | 描述 |
---|---|---|
Display Aspect Ratio | DAR | 显示的图像和视频的纵横比 替代名称是图像纵横比(IAR)和图片纵横比 |
Storage Aspect Ratio | SAR | 图像或视频帧的长宽比取决于视频源 |
Pixel Aspect Ratio | PAR | 像素宽度与其高度之比,在大多数LCD中它是1:1,但是一些模拟设备使用矩形像素 |
Original Aspect Ratio | OAR | 从家庭影院标准术语来说,表示视频最初创建的方面,许多电影具有广泛的方面 |
Modified Aspect Ratio | MAR | 家庭影院标准术语,表示调整OAR以符合可用输出屏幕长宽比的方面,通常为4:3或16:9 |
DAR,SAR和PAR之间的关系可以用等式表示。
DAR = PAR x SAR
在ffmpeg中有一个-aspect选项可用于指定输出视频:
-aspect[:stream_specifier]
托马斯·阿尔瓦·爱迪生和威廉·迪克森于1892年创建了一种35mm宽的薄膜通用标准,其中穿孔确定了24.89x18.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标准中3种宽高比中的一种。 比例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,并以1920x800的分辨率录制电影 |
CIE
国际照明委员会(法国国际照明委员会 - 国际照明委员会)是关于照明,照明,色彩空间等的机构和权威机构,更多地参见色彩校正章节。
颜色深度,位深度,每像素位数
颜色深度,位深度和每像素位数是描述使用多少位来指定图像中每个像素组件的颜色属性的术语。 表中使用最多的颜色深度:
每像素的位数 | 颜色数量 | ffmpeg中可用的对应像素格式 |
---|---|---|
1 (B&W) | 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 | gray, pal8, bgr8, rgb8 |
12 | 2^12 = 4096 | yuv420p, yuv411p, yuvj420p, nv12, nv21, rgb444be, rgb444le |
16 high color | 2^16 = 65,536 | yuyv422,yuv422p,yuvj422p,yuv440p,yuvj440p,rgb565be等 |
24 true color | 2^1 = 16,777,216 (我怀疑这个数据的正确性。。。) |
rgb24, bgr24, yuv444p, yuvj444p, gbrp, 0rgb, rgb0, yuva422p,等 |
32 true+alpha | 24-bit with alpha | argb, rgba, abgr, bgra, yuva444p, yuv422p16be, yuv422p16le |
30 deep color | 2^30 = 1,073,741,824 | yuv444p10be, yuv444p10le, gbrp10be, gbrp10le |
36 deep color | 2^36 = 68,719,476,736 | yuva444p9be, yuva444p9le, gbrp12be, gbrp12le, yuv444p12be等 |
48 deep color | 超过280万亿 | rgb48be, rgb48le, bgr48be, bgr48le, yuva422p16be, yuva422p16le |
颜色模型和颜色空间
颜色空间是从颜色模型派生而来的。 色彩模型描述了可用于模拟人类视觉的方法。 当这种描述如何用颜色表示数字的数学模型辅以用于解释这些数字的精确定义时,这样的一组颜色被认为是一种颜色空间。 数字颜色表示通常使用3或4个组件来描述每种颜色。 更精确的规格要求更大的数字,详情请参见上一节。 5种颜色模型被认为是主要的:CIE,CMYK,HSL / HSV,RGB和YUV以及视频技术通常使用RGB和YUV。 计算机显示器使用像素来显示信息,颜色空间以像素格式实现,他们的列表在第二章中介绍。
色彩视觉
尽管人耳对从16到20,000赫兹频率的振动敏感,但人眼能够感知频率从大约405 THz(740纳米)到789 THz(380纳米)的电磁波。 没有颜色的暗光被称为圆锥体的特殊眼睛细胞感知,并且三色视觉由棒状细胞提供。 3种不同类型的棒状细胞对3种基本颜色敏感:红色,绿色和蓝色:
- L(长波)rods - 对大约564到580纳米的波敏感 - 红色
- M(中波)rods - 对约534至545纳米波长敏感 - 绿色
- S(短波)rods - 对大约420至440纳米的波敏感 - 蓝色
rods的峰值灵敏度为约498nm的波,因此绿色感觉比红色好,甚至比蓝色更好,更多细节在隔行视频一章中。
DCT - 离散余弦变换
离散余弦变换用于利用有损编解码器对音频和视频数据进行压缩,从而减少多次存储的数据量。 它使用一个以不同频率振荡的余弦函数和来将复信号转换为复信号。 DCT是离散傅立叶变换(DFT)的一种特殊类型,其中输入和输出采样是实数(DFT与复数相匹配)。 使用ffmpeg的DCT示例:
- 选项-dct [:stream_specifier]为任何编解码器设置DCT算法
- 选项-idct [:stream_specifier]为任何编解码器设置DCT实现
- 值为ildct(使用隔行DCT)的任何编解码器的标志选项
- 值为任何编解码器的-debug选项中的dct_coeff
- 对于任何编解码器,在-cmp,-subcmp,-mbcmp,-ildctcmp,-skipcmp和-precmp选项中的值dct(绝对DCT转换差的总和)和值dctmax
- 为任何编解码器选项-skip_idct [:stream_specifier]选项
解码器
在转码过程中,解码器处理来自分路器的编码数据包,并为下一个处理生成未压缩帧。 从FFmpeg文档定义:
“解码器是FFmpeg中的配置元素,可以解码多媒体流。” 解码器列表可以使用以下命令显示:
ffmpeg -decoders
分路器(demux)
在转码过程中,解复用器(也是解复用器和解复用器)读取输入文件并生成编码数据包,发送到解码器进行解码。
从FFmpeg文档定义:
“分解器是FFmpeg中的配置元素,它允许从特定类型的文件读取多媒体流。”
分解器在可用格式中列出,详细信息在第二章中。 有关特定分路器的信息可以使用以下命令显示:
ffmpeg -h demuxer=demuxer_name
编码器
在转码期间,编码器处理未压缩的帧,并根据选定的编解码器将它们编码为发送到解复用器的数据包,通常采用某种压缩,有损或无损压缩。
FFmpeg文档中编码器的定义:
“编码器是FFmpeg中的配置元素,它允许编码多媒体流。”
编码器列表位于第二章中,可以使用以下命令显示:
ffmpeg -encoders
要显示关于特定编码器的详细信息,我们可以使用以下命令:
ffmpeg -h encoder=encoder_name
FFmpeg配置
原生FFmpeg源代码的可能性通过包含来自其他开源项目的附加软件库代码得到了改进。 在使用名为configure的配置文件的--enable-library选项进行编译之前,会包含这些库。 在每个控制台使用ffmpeg的情况下,ffplay和ffprobe工具都会显示实际的FFmpeg配置并启用其他库,如下一个控制台输出中所示:
显示的还有FFmpeg本地库的版本:libavutil,libavcodec等
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)
Macroblock
图像或视频帧到宏块的划分是使用离散余弦变换(DCT)进行编码的一部分。 在FFmpeg中,各种AVC编解码器上下文选项,H.263编码器选项,ProRes编码器选项,libx264选项,libxavs选项等都使用宏块。
运动矢量
运动矢量根据另一图片(参考图片)中宏块的位置来表示图片中的宏块。 运动矢量是视频压缩过程中运动估计的主要元素。 H.264标准的官方定义是:
用于帧间预测的二维矢量,其提供从解码图片中的坐标到参考图片中的坐标的偏移。
运动矢量在FFmpeg中的使用示例:
- 值为mv4(在宏块(mp4)中使用四个运动矢量)in -flags选项用于任何编解码器
- 任何一个编解码器的-ec(错误隐藏策略)选项中的guess_mvs(迭代运动矢量(MV)搜索)
- 值为mv(运动矢量)的任何编解码器的调试选项
- -任何编解码器的-vismv [:stream_specifier](可视化运动矢量)选项
- 任何编解码器的-me_range [:stream_specifier](限制运动矢量范围)选项
- 任何编解码器的-bidir_refine选项(细化双向宏块中使用的2个运动向量)
- 去抖滤波器使用x,y,w和h参数指定矩形区域来搜索运动矢量
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.)。
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
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
MPEG-4
ISO / IEC对标准的正式定义是:“视听对象的编码”。 它在1998年得到了标准化,其主要特点是:
- 新的编码算法ACE(高级编码效率),与MPEG-2相比,其数据存储/带宽减少了约11倍
- 解码器是渲染处理器,压缩比特流描述3D形状和表面纹理
- 支持MPEG-J(Java API),是定制交互式多媒体应用开发的程序的解决方案
- 支持使用专有技术管理和保护DRM(数字版权管理)等内容的IPMP(知识产权管理和保护)
对于带有MP4扩展名的输出文件,ffmpeg会自动选择h264编码器和yuv420p像素格式。
复用器(mux)
在转码过程中,复用器(也是多路复用器或多路复用器)处理编码的数据包,并生成指定格式的文件。 FFmpeg文档中复用器的定义:
“Muxers是FFmpeg中的配置元素,允许将多媒体流写入特定类型的文件。”
muxers的列表在可用格式的第二章中。 要显示有关特定复用器的详细信息,我们可以使用以下命令:
ffmpeg -h muxer=muxer_name
像素
像素或像素来源于图像元素,并表示数字图像或视频帧的最小可控元素。 像素的形状通常是正方形,但一些帧分辨率使用矩形像素。 像素宽度和高度之间的比例是像素宽高比,通常缩写为PAR。 ffmpeg包含包含1个,3个或4个组件的像素格式,并使用以下命令显示:
ffmpeg -pix_fmts
协议
计算机术语中的术语协议通常意味着一组用于数据接收和传输的通信规则。 FFmpeg文档中协议的定义:
“协议是FFmpeg中的配置元素,允许访问需要使用特定协议的资源。”
可用协议列表在第二章中,可以使用以下命令显示:
ffmpeg -protocols
协议的例子是http(超文本传输协议),rtmp(实时消息传输协议),tcp(传输控制协议),udp(用户数据报协议)等。
量化
数字信号的量化涉及将一系列值减小到代表性的单个值。 媒体处理包括音频和视频量化,音频中量化的声音幅度和视频编码涉及颜色和频率量化。 音频和视频量化都可以利用DCT变换。 与量化相关的ffmpeg选项的例子:
- 值为任何编解码器的标记选项(归一化自适应量化)
- 任何编解码器的-debug选项中的qp(量化参数)和vis_qp(可视化QP)值
- -trellis [:stream_specifier](速率 - 失真最优量化)选项
采样和采样率
采样连续(模拟)信号意味着将其降低到离散信号,例如声波(图中所示)被转换为一系列采样。 这些样本的数值以数字表示,这种数字形式可以保存到计算机文件中。 采样率(或频率)决定了每秒采样的数量,典型的音频采样率是8000 Hz和11025 Hz的倍数。 人耳灵敏度范围从16 Hz到20 kHz,由于采样定理,至少需要40 kHz频率才能表示所有可听声音,选择44,100 Hz作为CD音频的标准。
视频
术语视频是在电视被发明时创建的,并且表示一种以电子形式处理运动图像的技术(与电影 - 光化学形式相比),可以包括:
- 捕获
- 记录
- 压缩
- 编码
- 解码
- 传送(广播)等。
主要的视频功能是:
- 帧率
- 长宽比
- 存储类型(模拟或数字)
- 色彩空间
- 交错式或渐进式
- 质量(由用户感知)
- 每像素位数(色彩深度)
- 编解码器(仅数字视频)
- 3维(3D)
视频表示以帧速率指定的快速序列投影以产生连续运动的假象的静止图像,当人眼看到连续场景时的最小帧速率大约为每秒15帧图像(帧)。 视频来源于电影,这是一种处理运动图片的机械技术,最初是为电影和电视开发的,它使用隔行扫描来消除闪烁。 FFmpeg适用于第二章中列出的许多视频格式。 一些格式能够存储多个不同的运动图像序列,并且这些序列被称为视频流; 它们的编号是从零开始的,第一个流编号为0,第二个编号为1,等等
视频过滤器
FFmpeg中的过滤器是通过libavfilter库实现的。 为获得最佳性能,它们通常用于过滤链(逗号分隔过滤器的说明)和过滤器图形(分号分隔的过滤链)。 使用filtergraphs可以使用带标签的链接替换后面的filterchains中的输入,默认情况下会创建一个特殊的[in]链接标签,并表示使用-i选项输入的输入。 将过滤器与过滤链和过滤器图组合在一起比重复处理更加优选,所述重复处理涉及由压缩算法引起的轻微变化。 过滤器列表位于第2章中,由以下内容显示:ffmpeg -filters视频过滤器可根据多个标准进行划分,总体分类见下表:
视频过滤器(一般分类)
过滤器类型 | 描述 | 示例 |
---|---|---|
预过滤器 | 在编码之前使用 | 对比度调整 去闪烁 逐行扫描 降噪 缩放(缩减采样,上采样) |
Intrafilters | 用于编码(通常是视频编解码器的一部分) | 解封装 |
Postfilters | 解码后使用 | 解封装,逐行扫描,dering |
注意:一些像隔行扫描一样的滤镜被列入2类,因为输入视频流的修改取决于软件实现。
视频管道
视频流水线描述了从原始视频输入到显示设备上最终输出的视频帧处理过程,图中显示了一个简化的视频流水线。 ffmpeg包含2个特殊输入设备dv1394和iec61883,可直接从数码摄像机使用的FireWire端口录制。
关于作者
Frantisek Korbel是Zend认证工程师,他的工作包括编程,视频编辑和网页设计。 2004年,他创建了一个使用Macromedia Flash的急救基础免费软件,从那时起他经常使用动画和视频。 他在2009年使用Adobe AIR开发了化学元素学习周期表。 他的大部分活动都专注于志愿工作,主要用于发展中国家的教育和社区项目(非洲 - nkolfoulou.org,oyoko.org),印度(kidedu.org)等。他参加了联合国志愿工作的各种项目, 由联合国开发计划署协调的WaterWiki.net网站设计。 为了这本书,他创建了一个支持网站ffmpeg.tv。
链接地址
书主页:http://ffmpeg.tv
Facebook: http://ffmpeg.tv/facebook
witter: http://twitter.com/FFmpeg
YouTube: http://youtube.com/FFmpegTv