ffmpeg 基础知识

  • (stream):通常的视频文件中最易见的是视频流与音频流两个流。部分视频文件(多为 mkv 文件)还有字幕流,即内挂字幕。注意,有的视频将字幕嵌入到了视频流中(内嵌字幕),这类视频没有字幕流,也无法提取出字幕文件。

    • 码率/比特率(bitrate):衡量流的数据量的标准。高码率的视频、音频携带了比低码率更多的数据,在压制时(允许的)损失较小,因此它们的质量一般更高。例如,128 kbps 的 MP3 音频的听感效果一般比 64 kbps 的好。

    • 分流/混流(mux/demux):将多个流从一个视频文件中对应地抽取出来,称为分流。反之,将多个流整理后写入某个文件,称为混流。

    • 容器(container):可以粗略地理解为某种扩展名类型的视频文件。比如 MP4 是一种容器,MKV 是另一种容器。

  • 编码/解码(encode/decode):将流用某种格式或规范记录下来并存储,称为编码;将编码后的流,根据格式或规范来逆向实现编码的过程,从而将流还原出来,称为解码。我们最经常听到的规范大概是 H.264,最常见到的编码器可能是 libx264。

  • 色深位(bit):该概念与图片中颜色分级的位概念一致。在很长一段时间内,最广泛使用的颜色分级会把纯黑到纯白的灰阶分成 256 级,因此叫 8 位(因为 28=256)色深。8 bit 的视频也是最广为使用的。

  • 色度采样(chroma sampling):视频在录制或编码时,我们常逐个记录像素的明度、而采样式地(非逐个)记录像素的色度,以此减小视频大小。这种方式称为 YCrCb,其中 Y 表示明度,Cr 与 Cb 用于记录色度(红色与蓝色的偏移量)。

    色度采样方式常常使用 x:y:z 的方式来表示,如 4:2:0。这种记法表示在 4 个像素宽、2像素高的区域中,每行对 x 个像素进行亮度采样。x 通常是 4,也就是全像素亮度记录。而 y 与 z 分别代表第一行与第二行的采样数。例如,4:2:2 表示在两行中均只对 2 个像素采样色度(剩余像素的色度由采样速度推断),因此实际只使用了这 8 个像素中 4 个像素的色度信息,即丢失了 50% 的色度。同理,4:2:0 在第一行对 2 像素色度采样、不在第二行色度采样,因此丢失了 75% 的色度信息。最后,4:4:4 表示对全像素记录色度。

在 FFmpeg 中,可以使用 ffmpg -pix_fmts 来查看 FFmpeg 支持的所有像素格式。

常用的视频编码格式有:

  • H.264 是上一代最广为使用的视频编码格式,始于 2003 年,当之无愧的一代霸主。在 FFmpeg 中可由 libx264 编码器支持。

  • H.265 (或称 HEVC) 是 H.264 的接任者,于 2013 年正式面世。它在同等视频质量下提供了相比 H.264 而言可达 50% 的体积缩减。 libx265 编码器对该编码格式提供了支持。

  • VP9 经历了从 VP3 起漫长的版本迭代,VP 系列解码器的开发公司 On2 被谷歌收购。谷歌在 2013 年左右推出了取代上一代 VP8 编码的 VP9,主要为旗下的互联网视频平台 Youtube 所采用。

  • AV1 (AOMedia Video 1) 是 H.265 的免版税竞争者,极大地基于 VP9 的技术,并在 VP9 的基础上提供了惊人的压缩比率。其开发联盟由诸多互联网公司支持,并受到主流浏览器 Chrome 与 Firefox 的积极推动。它在 FFmpeg 中由 libaom-av1 编码器对该编码格式提供支持。

下次说说常用编码器与参数

你可能感兴趣的:(ffmpeg,ffmpeg)