伦娜(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]
当然,在一篇文章中不可能涵盖所有内容,但是我相信这种材料足以提高许多视频的质量。
阅读文档和实验。
材料:
ffmpeg.org/ffmpeg-all.htmlzh.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profileszh.wikipedia.org/wiki/Chroma_subsamplingen.wikipedia.org/wiki/Color_spaceen.wikipedia.org/wiki/YUV除了上一篇文章中的
示例之外,我还了解了我的代码的另一种安装方式-
单击 。 我尝试从这些站点的文章中举例,尽管如此:
*我与提到的网站的作者没有直接关系,并且可能不会分享他们的观点和意见。 我无法评论有关授予代码的人员和方式的决定。准备回答问题。