ffmpeg 程序员使用的 lib Swscale 是什么?
- 它对 AV 编码/解码有什么好处?
- 它与 av* 库相关的位置是什么?
Swscale 主要用于播放器,而不是编码/解码。如果您想以与编码时不同的像素大小/纵横比显示视频并且您没有硬件视频缩放支持,则这是必要的。Swscale 还执行各种 RGB 和 YUV 颜色格式之间的颜色空间转换,以及打包(单个缓冲区中的所有通道)和平面(每个通道都有自己的缓冲区)格式之间的转换。所有这些例程都经过高度优化;据我所知,至少在 x86 和 x86_64 上,目前不存在任何更快的软件实现。
如果源视频尚未采用编码器所需的格式,则编码视频也可能需要 Swscale。例如,如果您的源视频是 RGB,您可能需要将其转换为适当的 YUV 平面格式,因为大多数编解码器都适用于 YUV。这需要色彩空间转换(R、G、B 向量的仿射变换)和实际缩放(重采样),因为与 Y 平面(亮度,即强度数据)。
swscale 还可以进行高质量的重采样,例如:使用 lanczos 算法。所以基本上它会在色彩空间之间、“位数”之间进行转换,并且还会调整大小。它还具有使用 MMX 等的选项,因此速度很快。