在照片中-第一辆飞行的四轮自行车。 来源如今,由于必要服务的可用性,在网络上发布视频已不是一件容易的事。 但是,此类系统的内部结构没有太多资料,尤其是在俄语部分。
我从事高质量视频平台的设计和开发已有一段时间。 在本文中,我想描述一下我本人在开发之初就想知道的那些时刻。
本文不主张领导地位,在本文中,我将仅描述影响基于HTML5的视频内容的处理和交付的有趣或不明显的观点。
该材料是为那些已经学习该主题的人或准备寻找缩写,术语和概念的人员而设计的。
第二部分。格式
H264高知名度,尽管很受欢迎,但事实证明它并非在所有地方都可以使用-有些浏览器不支持它。 幸运的是,在现代设备上,几乎所有不支持H264的地方,VP8 / 9都能正常工作。 最好使用VP9,因为 我还没有看到可以使用VP8而不是VP9或H264的较旧版本的解码器。 VP9的图像质量比H264低约30%,这对降低通道上的负载非常重要。 另外,如果MPEG编解码器的使用可能有法律要求(一个非常复杂的故事),那么VP9可以满足要求。 没错,VP9的编码速度大约低一个数量级,因此,应为其处理分配更多的资源。
如果需要支持无法处理H264 High的旧设备,则可以添加具有较低比特率的480p H264 Main作为第三种格式。
由于硬件解码支持差,Hi10P最好不要使用。
H265显然需要支付许可费用,但这并不适合所有人。
软与硬
硬件编码器不使用编解码器的大多数高级功能(节省芯片空间),从而产生次优的编码文件。 格式的选择是有限的,并非所有参数都可以配置编码参数-通常,在真正影响结果的值中,只有一个比特率,甚至是非常特殊的感觉。 如果一切都按计划进行,那么在常规芯片上,您可以获得线性(在动态场景中会受到影响)和更高比特率的完全理智的结果。
当然,为了使硬件编码器正常工作,您需要一种并非所有服务器都具有的设备-视频卡或带有视频核心的处理器。
但是他们很快。 很好 与软件处理相比,速度可以增长数百倍,达到磁盘IO不够的水平。
硬件方法的处理在很大程度上取决于解决方案提供商-每个供应商都有自己的一组库和实用程序,并且有很多选择:英特尔快速同步,NVenc,AMD VCE。
借助软件处理,就没有这种限制,并且在等效比特率的情况下,效果会更好。 为了使用各种格式和编解码器,可以使用ffmpeg。 “ apparatchiks”没有这样的奢侈(有保留)。
视频质量标准
为了确定目标质量,最容易读取每个像素的位BPP。 此设置与分辨率,帧速率和持续时间无关。 从它已经考虑了公式的比特率
BPP * Framerate * Width * Height
最佳BPP值是由独立实验为您计划处理的视频选择的最佳选择。 H264的良好初始值约为0.09 bps。 对于高性能编解码器,例如H265和VP9,可以与比较压缩率成比例地减小此参数。 另外,对于高分辨率视频,BPP可以略微降低,因为 编解码器的效率随分辨率而略有提高,但是对于此更正,您需要考虑编码部分的分辨率(切片,编解码器的一项功能,可让您使用半独立的分数分辨率块对视频进行编码)。
对于通过上述公式获得的比特率,建议根据客户端的预期Internet速度预先确定最大值-很少有人会喜欢观看高质量但不断缓冲的视频。
这就是为什么使用编解码器的Q参数(质量鹦鹉)不方便的原因-固定值给出了不可预测的最终比特率。
maxRate最好用边距完成,因为 即使使用两遍编码,编解码器也可能无法准确维护所需的值。
为了保持动态场景的质量,最好启用编解码器的VBR模式,但是minRate最好设置总比特率的至少90%,以使速率峰值不会导致缓冲区不足。
诸如Intel VPA,ffprobe和Python之类的实用程序在质量控制中很有用。 使用后者,可以方便地比较源和转换后的视频,读取任意指标,例如像素的平均偏差。
实际上,由于心理视觉优化,PSNR和SSIM的计算效率极低,默认情况下编解码器中包含这些优化。 如果您想或多或少地计算这些指标,可以通过以下方式关闭优化
-tune [psnr|ssim]
但是,最终文件当然会与没有这些标志的文件不同。
预览版
生成缩略图图像的主要问题是模糊源。 定义和搜索清晰的图像是一项非常重要且耗费资源的任务。 幸运的是,大多数编解码器中的此问题的解决方案都包含在视频编码过程中。 您可以将关键帧移到最接近某个位置的位置;在围绕它的所有帧中,该关键帧将是最清晰的。 在ffmpeg中,可以这样进行:
-ss [] -vf \"select='eq(pict_type,PICT_TYPE_I)'\" -vsync vfr
标准编码器无法以最佳方式进行压缩,因此,在接收到图像后,最好使用optpng之类的东西对其进行压缩-在FHD预览中平均节省500kB。
最好将高分辨率图像隔行扫描。 因此,我们将略微增加大小(5-10%),但是会严重减少加载页面上的显示时间。
这篇文章已经变得很密集,我怀疑是否所有信息都必须打包成一个大文本。 如果您有兴趣继续进行此主题,请在评论中写下或在调查中做标记。
该平台已关闭,但您可以
在此处查看其工作。
*我与各自网站的作者没有关系,并且可能不会分享他们的观点和意见。 我无法评论有关谁以及如何授予代码访问权限的决定。准备回答问题。