它的视频平台具有ffmpeg和视频编码质量。 第二部分


伦娜(Lenna)喜欢看起来很好-毕竟是时装模特。 有传说称,将其添加到与视觉数据处理相关的文章的标题中,有+5的加号机会。

我将继续披露视频服务的功能。 今天注意有关编码选项及其选择的信息。

第一部分

大多数编解码器提供相当均衡的默认值,使您无需长时间选择参数即可获得正常结果。 但是,当涉及到大量的视频资料档案,比特率限制,与客户端设备兼容性的考虑以及对保持原始质量的合理渴望时,一切都会变得更加有趣。

不幸的是,没有提供魔术按钮“很好地编码”。 像caniuse类似物用于编码参数。 必须了解编解码器的功能。

简介:个人资料


H264的设置和参数太多,以至于开发人员自己为了避免混淆,决定制作一份配置文件列表-出于不同目的的“良好”配置。 标准配置文件确定了很多; 此外,实际上,通过设置自己的编码参数,您可以创建自己的配置文件,从而使所有人完全困惑。 因此,不幸的是,结果还是一如既往。



最初,创建配置文件以确定最终视频是否将在所需类型的设备上播放,但是现在按设备类型和配置文件,播放器之间没有明确的分隔。

在实践中,我将根据解码资源强度的级别来选择三组参数:

  • 禁用CABAC; 有条件的主要和基线资料。 它们仍然可以用于对延迟敏感的流传输;
  • 启用CABAC; 相对较高的知名度。 为了一切。 大多数现代(并非如此)的设备都可以发挥这种作用。 与主要产品相比,效率提高了-20%+;
  • 支持十位采样和其他高级参数。 有条件的Hi10P。 这种配置文件的问题是几乎完全缺乏硬件支持,并且对解码设备的需求增加。 手机,即使是高端手机,也无法应付此类文件。 如果您对设备有信心,可以将其用于个人图书馆。 效率再提高10-20%。

其他编解码器配置文件的概念没有像H264中那样开发。 对于他们来说,我们可以假设,如果支持编解码器,则可以完全支持编解码器,并且在播放期间的限制只能是过高的比特率,或者是其他明显被夸大的参数。 但是,随着VP8和VP9硬件解码器的激增,情况可能会改变。

现在到各个参数。

色彩空间


色彩空间的选择对编码效率几乎没有影响。 如果该参数不是一项功能,则可以将其留给编解码器选择(在处理未经编码的原始数据时很重要):许多播放器都非常专门地处理色彩空间信息,因此对于大多数用户而言,视频显示时可能会出现色彩失真(多为绿色)。

为了为大多数播放器保留颜色,需要在不同的空间中编码不同的H264视频:

  • 用于SD(宽度<1280)-BT.601
  • HD(宽度> = 1280)-BT.709

从2012年开始有出色的研究 。 关于这个问题。 不幸的是,带有此类错误的情况变化非常缓慢,尽管该文章中的某些测试结果不再相关,但仍需要考虑此类功能。 您有可能一直都用错误的颜色观看视频-事实证明,这不是导演的决定。
H264解码器已知此问题;其他格式可能没有此问题。

影格速率


如果您的来源不是游戏或动作视频流,则将较高的帧速率限制为25到30帧是有意义的-存在的帧数越少,用于描述单个帧的数据就越多。 最好将此值减小一个因子-这样跳帧是均匀的,否则视频可能会变慢。

帧速率可变。 使用VFR的不便有两个原因:首先,它在高频区域产生比特率峰值,从而立即清空缓冲区。 其次,VFR使转换计划的准备工作复杂化,从而迫使使用Q参数(我在第一篇文章中曾谈到过)。

尺寸


图像组是其中一些图像可以引用其他数据的块。 GOP大小的增加提高了编解码器的性能,以换取增加的内存需求。 较大的值对于具有相同类型的周期性运动的文件特别有效(您知道我的意思)。 此外,如果值较大,则倒带视频可能会出现问题,因为 更多数据将需要还原。
参数的名称以及度量单位可能因编解码器而异-请参见文档。

切片


为了加快解码(和编码)速度,可以将视频分为较低分辨率的部分。 这个想法是,处理四个分辨率为1280x720的视频要比处理一个分辨率为2560x1440的视频要容易。 在高于FHD的分辨率下,它是有意义的。 部件越多,编解码器的效率越低。 同样,使用这种分隔简化了多线程处理。

变形像素


当宽高比和像素宽度与高度的比率不同时,将出现矩形像素-宽屏DVD,其中16:9的视频分辨率为704×480(3:2含模拟增值税并经过风校正)。 播放此类视频不会造成问题,但是在编码时,您需要同时考虑分辨率和宽高比,否则很容易将变形图像转换为标准正方形像素而效率降低(高达35%!),甚至水平变形。

比特率控制


与比特率相关的编解码器主要有三种模式:

  • 当质量与场景复杂度成比例下降时,恒定比特率CBR;
  • 当比特率与场景复杂度成比例增加时,恒定质量const Q VBR;
  • 有限的比特率和质量-经典的VBR。

值得注意的是,大多数编码器(包括ffmpeg)在设置比特率时都不会将编解码器设置为CBR模式-文件是由VBR制作的,但在文档中并未始终定义限制(通常通过设置相同的minrate和maxrate来打开CBR模式)。

对于在线播放(和流媒体),受约束的VBR非常适合。 它提供比CBR更好的质量,并使您可以将流放入Internet频道。

maxrate / minrate的选择取决于客户端的渠道,最好不要超过20%的价差。

多遍编码


在VBR模式下很难预测文件上数据的分布,编解码器必须猜测并非总是会发生什么。 在多通道模式下,编解码器首先映射所需的比特率,然后进行编码。 这样,可以改善复杂动态场景中的视频质量( 例如,请注意“波纹”元素的数量以及场景之间的过渡数量)。 由于在第一遍中,编解码器仅分析源文件,因此与通常的看法相反,以这种方式进行处理所花费的时间不超过两倍,而只需要10%到15%的时间。


对于各种类型的源材料,已经准备了一些预置,用于微调一些基本编码参数-例如解块滤波器级别,心理-视觉优化参数。 如果您事先知道信号源的类型,或者如果您拥有一组结构化的视频(在批量处理的情况下),则使用这些预设可以改善视频的感知,并且效果很好。

预设:

  • 电影-适用于电影以及具有复杂框架结构的所有内容。 绝对是电影。
  • 动画-适用于具有较大实心区域的视频。 也就是说,最好使用动画预设进行编码,而是电影,尽管实际上是动画。
  • 静止图像-用于几乎没有运动的视频; 对mp4格式的歌曲进行了很好的优化,专辑封面是整个视频背景(有人告诉他们,即使flac在10分钟之内也不能重达300MB!);
  • 谷物-用于编码“嘈杂”源,例如监视摄像机;
  • psnr / ssim-评估编解码器其余参数的有效性;
  • fastdecode-弱设备的强制主配置文件;
  • 零延迟-顾名思义,用于低延迟流。

像素格式


格式和位数会严重影响文件的压缩和解压缩方式,以及失去哪种格式的质量。 像素格式描述的主要参数是:

  • 一种将颜色分解为分量的方法-YUV,RGB;
  • 当某些颜色分量以较低的分辨率保存时,颜色子采样参数(哦,如何!色度子采样更熟悉);
  • 颜色分量的深度(以位为单位)。

有意识地选择像素格式需要单独的分析,材料收集,并且高度依赖于源材料的类型。

简要地:

  • 并非所有的编解码器(最重要的是解码器)都支持可能的格式;
  • 使用某些格式对资源的要求更高-Hi10P在这方面与众不同的地方有所不同。
  • 使用子采样格式可以显着提高压缩效率,但是更难控制质量损失。

隔行扫描


发明了隔行扫描,以最低的成本使感知的帧速率加倍-比特率和分辨率相同,但是频率更高。 但是,随着快速运动,牙齿变得可见-前一帧的线条。 您可以摆脱效果而不会丢帧,也不会使用滤镜降低垂直分辨率,但是它们会降低清晰度。 如果视频将在浏览器中播放,则最好在编码时过滤隔行扫描,因为 在客户端上进行实时筛选不会提供最佳的视觉效果。

全部放在一起


x264示例:

ffmpeg -i [] -c:v libx264 -b:v [bitrate] #  -maxrate [bitrate] #   -r [framerate] -g [size] #GOP   -aspect [,  16:9] #   -profile high #    CABAC -color_primaries bt709 #   ,     -color_trc bt709 -colorspace bt709 -slices 4 #     -threads 4 -tune [value] -map_metadata:g -1 # ,      -map_metadata:s:v -1 -map_metadata:s:a -1 -map_chapters -1 -pass [1|2] #   -passlogfile [file] #    #-map ... -a:c ... -ac ... -a:b ..., ,  -   [] 

当然,在一篇文章中不可能涵盖所有内容,但是我相信这种材料足以提高许多视频的质量。

阅读文档和实验。

材料:

ffmpeg.org/ffmpeg-all.html
zh.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles
zh.wikipedia.org/wiki/Chroma_subsampling
en.wikipedia.org/wiki/Color_space
en.wikipedia.org/wiki/YUV

除了上一篇文章中的示例之外,我还了解了我的代码的另一种安装方式- 单击 。 我尝试从这些站点的文章中举例,尽管如此:
*我与提到的网站的作者没有直接关系,并且可能不会分享他们的观点和意见。 我无法评论有关授予代码的人员和方式的决定。

准备回答问题。

Source: https://habr.com/ru/post/zh-CN437936/


All Articles