阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

Electric Eye:Netflix 的音视频测试框架

  • 2015-10-08
  • 本文字数:1833 字

    阅读完需:约 6 分钟

作为一家北美视频租赁供应商, 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 读者交流群)。

2015-10-08 19:002503
用户头像

发布了 268 篇内容, 共 118.2 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

我的第一个Vue项目-Demo

Python研究所

6月月更

国内首款开源 MySQL HTAP 数据库即将发布,三大看点提前告知

StoneDB

MySQL #数据库 #开源

# 补齐短板-开源IM项目OpenIM关于初始化/登录/好友接口文档介绍

Geek_1ef48b

架构实战营毕业设计

KennyQ

gm

牛客java选择题每日打卡Day3

京与旧铺

6月月更

手机影像内卷几时休?

脑极体

openLooKeng,一款面向海量、跨DC的大数据分析利器

乌龟哥哥

6月月更

Eureka注册信息配置备忘

程序员欣宸

Java Spring Cloud 6月月更

获取Windows操作系统的语言版本

dvlinker

操作系统语言 UI Language MSDN

Prometheus 2.33.0 新特性

耳东@Erdong

release Prometheus 6月月更

Nginx学习笔记总结:初次认识 Nginx

百思不得小赵

nginx 6月月更

快慢指针算法

工程师日月

算法 6月月更

使用‘百家饭’自动生成API调用:JS部分进展(二)

百家饭隐私计算平台创业者

js OpenAPI 代码生成

Fabric.js 上划线、中划线(删除线)、下划线

德育处主任

JavaScript canvas FabricJS 6月月更

给 Angular 服务器端渲染应用设置一个渲染超时时间

Jerry Wang

typescript 前端开发 angular 前端框架 6月月更

Prometheus 2.34.0 新特性

耳东@Erdong

release Prometheus 6月月更

深度好文:什么是超网 Supernetting?

wljslmz

网络技术 6月月更 超网

工作一年闲记

玄兴梦影

总结 工作 自我感悟

@Query 疑难杂症

Damon

6月月更

# 云原生训练营毕业总结

Neil43

云原生训练营

利用 Repository 中的方法解决实际问题

Damon

6月月更

一文带你学会consul 基本使用和Docker部署

迷彩

架构 Consul 服务注册与发现 微服务治理 6月月更

不到40行代码手撸一个BlocProvider

岛上码农

flutter 前端 移动端开发 安卓开发 6月月更

TCP拥塞控制详解 | 1. 概述

俞凡

算法 网络 TCP拥塞控制

leetcode 300. Longest Increasing Subsequence 最长递增子序列 (中等)

okokabcd

动态规划 算法与数据结构 leetcoce

请坚持正确佩戴口罩

IT蜗壳-Tango

6月月更

基于STM32+华为云IOT设计的云平台监控系统

DS小龙哥

6月月更

Tiger DAO VC产品正式上线,Seektiger生态的有力补充

EOSdreamer111

物联网协议的王者:MQTT

wljslmz

mqtt 6月月更

Scala 基础 (二):变量和数据类型

百思不得小赵

scala 大数据 6月月更

Tiger DAO VC产品正式上线,Seektiger生态的有力补充

股市老人

Electric Eye:Netflix的音视频测试框架_语言 & 开发_张天雷_InfoQ精选文章