作为一家北美视频租赁供应商, Netflix 还研发了从拇指大小的电视棒到超大屏幕的曲面高清电视等各种各样的设备。如何能够更好的实现这些设备上视频、音频以及字幕的正确同步一直是 Netflix 专注的问题。近日,Netflix 推出了一个自动化的计算机视觉和音频测试框架——电眼(Electric Eye),以辅助在这些设备上进行的同步测试。
提起电眼,首先需要说到美国的二十一世纪通信和视频辅助行动(Twenty-First Century Communications and Video Accessibility Act,CCVA)。CCVA 行动由美国国会提出,主要为残疾人在通信和视频方面提供特殊的帮助。隐藏式字幕(Closed Caption,CC)就是在这种背景下诞生的一种特殊字幕。其最初设计的目的是将节目中的音频或对白等通过文字在屏幕上显示出来,为有听力障碍的人理解电视节目提供帮助。CC 一般采用 Timed Text Markup Language(TTML)进行编写,详细描述了字幕的内容、出现的时间和位置以及消失的时间等等。以往,Netflix 都是采用人工方式来将 CC 和视频结合起来,确定其内容和显示方式。但是,这种方式效率低下,且容易出错。此外,设备多样性也使得该问题不易解决。同步显示还需要考虑到各个设备的特点。由此,电眼项目诞生。
作为该项目的第一步,Netflix 采用 OpenCV 建立了一个针对平面电视的模型,并将问题切分为了两个子问题——获得一个针对电视的可以测试的框架,然后从该框架提取出字幕进行对比。OpenCV 本身已经内置了在平面上探测棋盘模式的功能,并能够产生透视角修正矩阵(perspective-correction matrix)和基于该矩阵封装图像的代码。这样,大概的功能已经实现。
但是,接下来还有很多小问题。最主要的就是电视本身是会发射光线的。这就导致摄像机摄录电视中视频时容易出现模糊、鬼影等问题。而视频内容如果为全黑屏又无法显示视频和字幕是否同步。因此,Netflix 选取了一段水流的画面作为测试视频,将其亮度降低了50%,然后在其上覆盖字幕。屏幕上部显示的是应该正确出现、已经内嵌在视频中的字幕,而下部显示的是经过解析显示出的字幕。通过比较这两个字母,系统就可以知道CC 字幕是否正确显示。此外,测试环境中的灯光还容易引起水面反光太强,影响到字幕显示。针对这些问题,Netflix 结合环境矫正技术、传统的OpenCV 图像清理技术以及CV 等提出了解决方案。最终,原型系统可以在66ms 级别可靠的探测delta,从而引入第二个原型系统的创建。
在第一个系统的基础上,第二个系统加入了一些额外的要求:处理过程要实时进行和系统要能够处理音频。但是, OpenCV 并没有提供音频接口,且性能有限。为此,Netflix 团队采用了创造性的编码框架——Cinder 。作为知名的C++ 库,Cinder 还提供了能够桥接OpenCV 的CinderBlock 模块和音频DSP 库。因此,音视频同步测试也加入到了原型系统中。而测试内容也采用了 Archimedia 专门为 Netflix 设计的、用于音视频测试的 Test Pattern 。测试过程包含以下步骤:小球到达底部之前在英语 2.0 轨道播放 1250Hz 的声音,过程持续 400ms;一旦小球到达底部,声音转变为 1000Hz,持续 200ms。这些模式每 6 秒钟重复一次。
为了鉴别正在播放的声音,Netflix 采用了 Cinder 的 MonitorSpectralNode 类。这样,系统就可以抓取第一帧和最后一帧,并感知声音频率变化的时刻,从而进行简单的音视频同步测试。接下来,系统就需要识别小球的位置,实现测试过程的自动化。为了排除屏幕发光、摄像机延迟和像素反应时间等带来的影响,Netflix 采用了图像处理、直方图均衡化以及图像阈值等技术。最终,系统能够取得大约 33ms 的精度和每次测量正负 33ms 的误差。
此外,测试过程中还遇到音频频率不一致的问题。其中,电脑中音频为 44.1kHz,通过 HDMI 后变为 48kHz,而并非所有的摄像机都同时支持 44.1kHz 和 48kHz。因此,Netflix 花费了 5 个月的时间来解决这些问题,最终搭建成功了电眼系统。现在,电眼 1.0 版本正式亮相。Netflix 也在计划尽快开源其绝大部分代码。Netflix 的高级软件工程师 Michael Russel 表示,公司接下来会继续对电眼进行额外的测试,并寻找更多的应用场景。而且,Michael 透露,Netflix 开源电眼的目的则是希望更多测试者能够直接受益或者从中获得计算机视觉和音频处理的测试方面的灵感和经验。
感谢徐川对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。
评论