Instagram提出两种视频编码可将时长缩短94%

2023-03-18 17:00   154   0  

眼看用户视频的增长将超过服务器的算力上限,既没有额外的服务器来支持,也不能对用户体验造成大的冲击,Instagram的工程师找到了两种编码过程中重复计算的部分,并将他们合二为一,如此便可节省可观的算力。他们是如何做到的呢?


23eb744e-768c-11ed-8abf-dac502259ad0.jpg


在对效率的不断追求当中,Instagram的工程师们开发出一种新的视频处理方法,能够将基础视频编码的耗时缩短94%。




有了这种方法,Meta的视频基础设施无需添加更多设备即可吸纳更多负载。




由此释放出的资源,可让更多用户观看高清编码流,提供更加清晰流畅的视频体验。这对网络连接不佳国家/地区的用户尤其有益。




Instagram的用户群体不断增长,目前月度活跃用户已超20亿。受众的迅速扩张也要求我们的服务器集群提供更好的性能体验。2021年初,我们的预测表明在未来12个月内,现有基础设施已经不足以消化所有用户的视频上传负载。但凭借对效率的不断追求,Instagram在工程师们开发出一种新的视频处理方法,无需向视频基础设施内添加更多设备即可吸纳更多负载。




Instagram会为用户上传的视频创建多种编码版本,不同版本间各有特性。而只要利用一种类型的视频编码辅助生成另一种类型,即可将观看次数较少的视频所占用的编码计算资源减少94%。由此释放出的更多资源可用于生成更多高清编码视频流,让更多用户获得更清晰、更流畅的播放体验。




Instagram如何分配视频计算资源


对于上传至Instagram的每段视频,我们都会为其生成两种视频编码版本:


基础编码,能够适配所有Instagram客户端,其压缩率较低、可以在较陈旧的设备上顺畅解码和播放。




高级编码,使用更新的压缩技术以提升播放质量。


问题在于,其中基础视频编码占用了我们超过八成的计算资源储备。如果继续沿着这个路线发展,那么基础编码功能将在一年内耗尽Instagram的全部资源。到那个时候,用户上传视频后需要等待更长时间才能完成发布,甚至根本无法正常发布。相比之下,我们的高级编码只占总观看时长的15%,预计将所有算力都花在基础编码上之后,高级视频编码将没有任何资源可用。


移除冗余工作负载


对于其中的基础视频编码部分,Instagram又具体划分出两种类型。对于每段上传视频,我们首先会生成最基础的自适应码率(ABR)版本,也就是最低功能类型。这样一来,客户就可以选择最适合当前连接速度的版本,防止带宽波动导致的画面卡顿——所谓的自适应码率就是这个意思。


另外一种则是很少用到的渐进式编码(另一种最低功能类型),我们同样会持续生成这个版本,以保证其与无法支持ABR的旧版Instagram应用相兼容。


传统上,我们从客户端上传至后端的原始文件会分别对应ABR和渐进式编码两个版本。这个进程会占用计算资源——如以下终端命令所示,将23秒长的视频转码为720p,共需要86.17秒的CPU时间。


$ TIme ffmpeg -i input.mp4 -vf scale=-1:720 -c:v libx264 output.mp4
86.17s user 1.32s system 964% cpu 9.069 total


我们注意到,这两组编码具有相似的设置——使用相同的编解码器,只是编码配置文件和预设略有区别。于是我们意识到,完全可以用渐进式编码的视频帧替换掉基础ABR编码,也就是将其重新打包为支持ABR的文件结构。如此一来,也就消除了生成基础ABR编码所对应的成本。以下终端命令表明,生成manifest文件并将视频帧重新打包为相同输入视频且支持ABR格式的文件结构,只需要0.36秒:


$ TIme MP4Box -add input.mp4 -dash 2000 -profile dashavc264:onDemand -out manifest.mpd 
video_output.mp4
0.36s user 2.22s system 95% cpu 2.690 total


这种方法省出了高级编码所占用的算力,牺牲掉的则是我们基础ABR编码的压缩效率。但我们认为,提高高级编码的生成比例对于Instagram用户而言应该是好事。


24112acc-768c-11ed-8abf-dac502259ad0.png


建立框架,验证我们的理论


在投入生产之前,我们得先验证这个理论。如果单纯比较基础ABR编码在变更前后的占比区别,并不足以得出有意义的结论。我们还需要衡量高级编码占比增加后的净值。从下图可以看到,从基础ABR中释放出算力之后,用户观看高级编码视频的时间确实更长了。这应该足以抵消我们发明的新基础ABR算法牺牲掉的压缩效率。


2443ec96-768c-11ed-8abf-dac502259ad0.jpg


为了做出进一步量化,我们还构建了一套测试框架,其中的测试池和控制池复制了一小部分用户流量。我们将各个池内的视频编码保存至不同的命名空间,稍后作为视频控制目录或测试目录中的一部分。这样在交付时,人们就只能看到来自其中某一目录的编码,帮助我们衡量新的编码方案是否更好。


24600494-768c-11ed-8abf-dac502259ad0.png


在此次测试中,我们证明虽然测试池中基础ABR编码的压缩效率有所下降,但高级编码视频的观看时间变得更长、足以抵消这部分损失。




登录icspec成功后,会自动跳转查看全文
博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。