x265发起者陈敏:别人看我是专注,其实我只是感兴趣而已

简介: 作为DivX/Xvid、x264参与者和x265的发起人,陈敏依然专注在工程实践第一线,用他的话说:(专注在Codec领域)是受自己的经历和性格影响,是我感兴趣而已。

认识陈敏是通过朋友介绍,当时我正在为第一次LiveVideoStackCon甄选讲师,陈敏的背景一下子吸引了我,如此低调、默默贡献的技术人正是我们希望挖掘的。但事与愿违,在通了十几封邮件后没能说服陈敏,但我知道“搞定”他只是时间问题。陈敏第二次引起我的注意是在2018年六七月间,在与快手音视频技术部负责人于冰沟通中得知,陈敏加入了快手,从那时开始我就知道,更加接近邀请陈敏来LiveVideoStackCon了。不过好事多磨,我们先从一篇采访开始吧,于是就有了本文。话说,这篇稿子反反复复被陈敏review了三、四次,而我经历的大部分邮件采访基本上一次review就通过。对文字如此较真的人,写出的代码应该也不会差吧。

作为DivX/Xvid、x264参与者和x265的发起人,陈敏依然专注在工程实践第一线,用他的话说:(专注在Codec领域)是受自己的经历和性格影响,是我感兴趣而已。


文 / 陈敏


策划 / LiveVideoStack


LiveVideoStack:陈敏你好,很荣幸代表LiveVideoStack采访你。能否向LiveVideoStack的读者介绍下自己,以及目前关注的领域。


陈敏:我的经历比较简单,最近20多年一直停留在改进性能的工程实践领域,主要关注视频编解码领域,最近10多年也扩展到其它相关领域,例如芯片前端设计、系统架构等。


八几年的时候,我开始对数据压缩领域感兴趣,自己看书和试验摸索学习相关理论知识,从1998年开始,随着开源软件在国内的兴起,兴趣逐渐转到开源视频编解码领域。


1999年左右有一个转折点,当时我第一次参加软件专业技术资格(水平)考试,以接近满分的成绩顺利拿到了高级程序员水平证书,这件事让我有信心把更多精力投入到软件研发上。2000年以来,我分别在StepDigital、Grandstream、Multicoreware几家公司负责软硬件设计、实现等方面的研发工作,参与和组织过最近30年来大部分音视频编解码标准(合计超过15种)的相关产品的开发工作。我的工作长期以来聚焦在常用硬件平台上的底层开发和代码移植优化等方向,主要包括 ARM、x86、TI、Philips、Freescale、Xtensa 等平台。我也是目前广泛使用的视频编码器标准HEVC的开源编码器x265的发起者以及主要贡献者之一。


我在2018年5月加入快手,目前在快手负责视频编解码算法实现和优化工作,参与快手自研视频编解码器的架构设计、性能优化以及自研算法的实现。


我自己业余关注的兴趣领域主要有芯片设计(仅数字前端)、CPU设计、软件加解密和攻击等领域,搞过如RISC-V CPU、硬件HEVC编码和自动驾驶核心部件设计等等有趣的项目。


LiveVideoStack:我们第一次接触还是在2017年,我记得通过许开强认识了你,当时LiveVideoStack刚刚成立不久,好不容易找到一位大牛所以就“咬住了不放”。我们前前后后差不多通了十几封邮件,最后很遗憾的未能邀请你参加第一届LiveVideoStackCon。当去年得知你加入快手后,我知道能邀请的时机正在逐步成熟了。为什么选择来快手?


陈敏:作为x265创始人,后期x265的发展受很多外部因素影响,逐渐开始跟不上时代变迁。举个例子,当时直播领域所需要的移动设备视频编解码器,国内的仟壹(qy265)做的比较好,而x265在移动端没有充分优化,所以我希望对x265进行改进。另外,新一代编码标准也开始制定了,很希望有机会加入一个好的团队参与下一代产品。


2017年年初的时候,有朋友知道我准备回国,推荐说可以关注下快手,于是和快手的于冰老师联系上。我当时和国内多家公司联系过,最后选择快手是因为看好于老师的技术眼光以及快手对技术的重视。我感觉到加入快手能真正专心做技术,同时快手用户量非常大,可以更好的锤炼相关技术造福很多用户。目前加入一年多,感觉当初的选择没错。


首先,快手的战场足够大,目前日活2亿,短视频日播放量超过200亿次,日上传量超过1500万,直播日活过亿。此外,快手用户机型覆盖广情况复杂,这给移动端编解码技术带来的挑战是非常大的。面对这些挑战,我们得从用户的需求出发,用技术来优化视频的上传、分发和传输,在视频编码质量、吞吐率、速度,以及最终用户体验上都做到极致。


我们团队希望能够独立从头到尾构建一个最强大的视频系统,解决一些别人解决不了的问题,这恰巧也是我想做的。比别人提前几年就在做一些事情,这是最吸引我的。


目前取得的主要成果,是自主研发的视频编解码标准算法,目前已经可以做到小批量上线测试,几个月后会做到大批量上线实验。我们从提出这个愿景到做好,花了两年的时间。另外我们的视频标准实验室,在下一代国际标准VVC中贡献了很多提案,最近还在评估各种硬件编码方案,为5G做准备。我们提前做了很多开拓性的工作,希望能在移动端视频这个特定领域做得更好吧。


LiveVideoStack:从Step Digital,Grandstream Networks到MulticoreWare,三段工作经历专注在研发,并没有改变技术路线,也没有往项目或管理方向转变。你很享受这一过程吗?有没有什么挑战或有趣的经历?


陈敏:我能一直专注在技术研发,是受自己的经历和性格影响吧。刚开始接触计算机,那个时候别说是搜索引擎,想进入网页都只能抱着黄页去找网址。而我一直以来的工作中,很多工作是没有可供参考的资料,需要自己在一片黑暗中去探索。当时的情况和现在不同,现在遇到了问题,通过搜索关键字轻松获取相关知识、案例或是开源代码,解决问题的渠道很多;那个时候,搜索引擎还不存在,也没有太多相关知识,只能摸着石头过河。于是在黑暗中摸索,做探索性的工作,已经成了我的习惯。


比如说1997年前后,当时兴趣驱动需要研究MPEG4国际视频标准,而手头只有一本高文教授的《多媒体数据压缩》一书,当时国内还无法找到国际标准文档,我花了不少时间访问了很多国外学校的FTP,才勉强找到参考模型源代码。下载回来后又遇到了编译错误、缺少配置文件说明等问题,由于没有资料可以参考,只能凭借自己的经验逐步将源代码修改为可分析、可执行调试的代码。通过这种方式我大致理解了MPEG4标准的实现方式和协议细节,为其后参与DivX项目打好了基础。


比较有挑战的经历,这里我举两个例子吧。


在x265开发早期,我也遇到了如何保证编码器结果正确性的问题。我基于多年的嵌入式软硬件系统研发经验,参考硬件芯片研发流程,建立的自校验系统,通过修改版的HM(注:HEVC参考软件)输出测试数据 Gold Test Vector,然后自己的x265编码器读入该数据,并在每一步自动校对,一旦发现不同就可以报告出来方便排查。该方法极大的提升了研发效率。


x265实现线程池(Thread Pool)后有段时间发现会出现很小概率的数据不匹配,表现为输出结果不固定,由于数据解码不出错,但是数据的变动必然是存在bug,经过很长时间排查,最后发现是对一个控制量没有做线程同步,造成画面下面的视频行会比上面更早完成,最终影响了后续处理流程。寻找和排查这个错过的过程是很艰难但是快乐的,使得我积累了不少并行程序开发的经验。


而每每我克服了困难,回头看当时认为不可战胜的劲敌,就只会觉得,也不过如此。我真正享受的可能是摸索的过程吧。


LiveVideoStack:你是如何做到如此的专注的?难道除了Codec没有吸引你的技术方向或领域吗?


陈敏:别人看我是专注,其实在我看来,是我感兴趣而已。可能是因为不善于交流,加上享受纯粹的技术工作,我才能一直专注。对于其他技术方向而言,除去Codec,我在业余时间会研究技术领域的发动机,像AI芯片、CPU设计等,如同有了好用的发动机,至于车怎么造就留给用户自行发挥了。


比如说2017年RISC-V开源指令集比较火,被印度选为国家CPU项目基础指令集,我也跟风去看了下,为了深入探索,为自己业余时间使用Verilog语言实现了这个CPU,期间获得不少收获:首先发现了一些指令集设计上的缺陷,期间和编译器开发团队以及其它业内设计公司进行技术上的探讨,并将和国外大学实验室一起发表论文并给出建议解决方案;其次我跟着MIT的在线课程学习了CPU设计技术,掌握了OOO(Out Of Order, 乱序执行)、分支预测、超线程、多发射等高级CPU设计技术。期间为了在RISC-V上实现自定义SIMD指令,对LLVM也学习了一段时间,掌握了如何在LLVM编译器中添加和实现自定义SIMD指令,同时和LLVM编译器开发团队中RISC-V模块实现者在指令优化上进行了收获良多的探讨。


LiveVideoStack:从1999年开始,你一直在为开源项目贡献,包括Xvid,x264,x265,x266,THEVC。是什么原因让你在这些项目中投入这么多精力,你获得了什么?在这些项目的协作过程中,如何让自己的patch(或其他贡献)获得认可,有没有经验可以分享的?


陈敏:我在最近20多年一直都在开源领域贡献自己的成果,主要原因还是兴趣驱动,我从小学开始就对数据压缩技术比较感兴趣,最初使用6502汇编语言完成一个Huffman压缩器就感觉到很开心,这也为之后探索兴趣的养成奠定了基础,比如说我当初从Basic语言转为C语言大约用了一天时间,数据压缩中的算术编码器也是一天以内就能完全理解。


我通常会在业余时间做这些研究,大多数使用双休和节假日,遇到特别感兴趣的也会在下班回家后忙到凌晨,对我的感觉只是做玩具而已,并不觉得是在工作。


贡献patch的时候只是觉得自己的修改可以提升开源软件的效果,纯粹贡献力量,发patch到mail-list就好,能否被官方接受纯粹看运气,也不会太多计较得失。


LiveVideoStack:能否介绍下Xvid,x264,x265,x266,THEVC这些项目,与我们平时提到的H.264,H.265,H.266有什么不同?


陈敏:Xvid、x264、x265是工程领域的视频编码器软件,而H.264、H.265、H.266是视频编码标准,最大的区别在于一个是工程实践,一个是算法原型。


Xvid是当年DivX事件后重新成立的MPEG4参考软件[1,2],也是最后幸存下来的实用化开源MPEG4视频编码器。x264、x265是对应国际标准H.264/AVC、H.265/HEVC的开源视频编码器。


THEVC是x265的前身,主要用于架构和算法验证,在x265创立之后就停止开发了。x266是前几年我创建的一个小项目,当时主要想法是实现一个软硬结合的视频编码器框架,加入快手后工作太忙暂停了。


x264和x265中都离不开VideoLan基金会的影子。x264在后期开始走商业化路线,通过雇佣人手来加快开源项目的研发进度和代码品质。由于这个路线被实践证明可行,MulticoreWare公司在x265时代被多家公司投资,以商业团队去运作H.265/HEVC视频编码器。


LiveVideoStack:为什么在2017年开始就不再为这些开源项目贡献了呢?发生了什么?


陈敏:2017年我被MulticoreWare公司抽调去协助Steve(x265的另一位主要贡献者)的雷达芯片项目,所以整个2017年往后都没再对x265项目作出公开贡献,只是负责日常内部代码review。


LiveVideoStack:在海外工作十多年回到国内,对比国内外的企业、文化方面有哪些不同?


陈敏:首先更正下,我拿到美国工作签证是2013年,但是离开中国是2014年春节后,算起来只是在海外工作了五年。


我个人的感受是国外公司会对工程技术更重视一些。由于我在海外没有换过工作,一直都在MulticoreWare公司,所以对国内外企业的对比可能不太完善,只能简单说下重点。


我和国内的朋友交流过程中了解到,国内的一些大公司在招人的时候,HR会比较看重学历、论文等,对工程实践能力重视度不够,但做研发应该更看重工程实践能力,这样可能会让学历和论文不强的人在HR这关就错失了机会。国外企业更需要解决实际问题的人才,大多更加注重工程实践能力。在快手一年多,我感受到了快手对技术的重视,对能够解决实际问题的人才的重视,这也是我可以在这里专心做的原因。做技术的人都希望跟强者一起合作,这样会效率更高,这里做事情讲究追求极致,注定有机会产生一流的技术团队。和优秀的人一起工作,也会有更大的成长空间。


快手的音视频团队,从初期几个人成长到如今一百多人的规模,这个成长速度是创业团队才有的。另外,我们加班不算多,只在业务需求比较紧的时候才需要加班,很多时候是自己主动要求加班,想要加快项目进度。快手的加班可以自己选择调休或者换算成工资。对待工程师比较人性化这一点,非常接近硅谷的互联网公司,让我很容易适应。


LiveVideoStack:你在海外这五年,恰恰是国内互联网乃至移动互联网爆炸式发展的关键阶段,是否也会感叹“错过了”许多?


陈敏:在海外这五年,正是x265从创立发展到现在辉煌阶段的关键五年。x265目前在世界范围内广泛应用,是HEVC编码器工业界的实际参考标准。x265项目在2011年底创建,我在2013年加入Multicoreware全职开发这个项目。这个项目中,我和Steve、Deepthi 是代码提交量的前三名,我的提交量仅在Steve之后。


在海外的五年,正好是国内移动互联网爆炸式发展的时代,但是作为一个经历过2000年“.com”从辉煌到破灭时代的程序员,我完全没有觉得错过了。我认为事情都有两面性,可能错过了很多机会,但是收获了人生,这就看个人如何抉择了。国外环境好和生活压力小,可以专心做技术,感觉还是很惬意的。可能关注点只是在技术吧,没有太在乎其他。


LiveVideoStack:作为一名有过丰富国内外工作经历的技术人,能否给即将走向社会的毕业生一些求职建议?比如选择国外的公司,还是国内的工作?如果选择国外的工作,有哪些需要注意的地方?


陈敏:对于求职的毕业生来说,我觉得首先是要选择自己的方向。如果是走纯技术路线,或考虑家庭、环境等,国外会好很多。对于理论研究能力强、学历高的人,留在国内发展可能机会更多更好。其次,心态很重要,能够在一个领域专注沉淀20年、30年甚至更久,是比较考验毅力的,但是当停留的时间够久时,会发现未来的机会和上升空间会更加巨大。在我看来,还是建议年轻人应该静下心沉下去做事情。


最后针对选择去国外工作的朋友,我有两点建议,流利的英语很重要,再有就是年轻人还是要沉下心来,把基础打好打牢,提升基础业务水平。


我再举两个人的例子说说国外研究技术的环境。国外可能更偏向于兴趣驱动来选择工作,同时社会大环境也会给予埋头技术的人以不错的回报。


比如说Steve,他一直埋头于技术几十年,开发各种工具以及底层支持代码。我对他的印象是为人随和,平时穿着也很普通随意,虽然每天工作到很晚,但觉得做自己感兴趣的事情很开心。而Title一直都是Software Engineer,但待遇是VP级别。


另外一位令人敬佩是DCT三位发明人之一的K.R.Rao教授,他当了几十年的终身教授,另外两位发明人已经去开公司做的风风火火,他却还留在UTA(The University of Texas at Arlington)任教。我和他见过一面,那次见面印象深刻。是2017年我第一次去UTA办公室拜访Rao教授,我到达的时候是中午十二点多,而学校是下午两点上课,教学大楼只有零零散散的三五个人。我在大厅等到十二点半多的时候,看见一个老人步履蹒跚走过,由于位置原因,我看见的是背影,但直觉告诉我这很可能就是Rao教授,一会果然看见他走到挂着Rao教授牌子的办公室,开门到桌前埋头翻着文档做着研究工作。我上前打招呼才得知我的猜测没错,他果然是Rao教授,接着我们愉快的聊了一下午,得知他一直奋斗域领域前沿研究领域,同时著书育人,每天忙碌并快乐着。这里不得不提一句,Rao教授可是1936年出生的,这么多年来还能一直坚持在第一线做自己感兴趣的研究工作,也是非常难得的。


LiveVideoStack:平时有哪些业余爱好?能否分享最近看的一本书或一部电影?


陈敏:典型技术宅,平时可能也就象棋、羽毛球吧。在北京空闲时间少,最近看的都是休闲类小说。当然,我经常翻阅的经典收藏书有几本,单独选取一本有点困难,如果非要说,我推荐《数据压缩的原理与应用》(Data compression Principles and Applications),有吴老师翻译的中文版,个人还是觉得第一版更好。我不经常看电影,当然还是推荐我经常反复看的经典影片《肖申克的救赎》。


LiveVideoStack:最后一个问题,你会来参加LiveVideoStackCon2019北京吗 : )


陈敏:因为LiveVideoStack一般都在工作日举办,所以是否参加看公司安排。


[1] https://zh.wikipedia.org/wiki/Xvid


[2] http://www.voidcn.com/article/p-njplwegw-us.html

————————————————

版权声明:本文为CSDN博主「LiveVideoStack_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/99906620


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

阿里云视频云@凡科快图.png

相关文章
|
7天前
|
前端开发 开发者 C++
通过对比普通开发者与大牛们的学习策略,揭秘他们高效学习的秘诀
前端技术日新月异,大牛们如何保持竞争力?本文对比普通开发者与大牛的学习策略,揭示高效学习的秘诀:明确目标、主动探索、系统资源、注重实践、持续学习。通过这些方法,大牛们能快速掌握新技术并应用于实际工作。
38 5
|
20天前
|
前端开发 Java 关系型数据库
探索后端开发:从基础到高级的旅程
【10月更文挑战第20天】本文将带你走进后端开发的世界,通过通俗易懂的语言和实际代码示例,让你从零基础开始,逐步了解并掌握后端开发的核心技术。无论你是初学者还是有一定基础的开发者,都能在这篇文章中找到适合自己的学习路径和方法。让我们一起开启这场技术之旅吧!
32 5
|
8天前
|
存储 Java 关系型数据库
探索后端开发:从基础到进阶的旅程
【10月更文挑战第33天】在这篇文章中,我们将一起踏上一段激动人心的旅程,深入探索后端开发的奥秘。我们将从最基本的概念开始,逐步深入,直到能够理解并应用高级后端技术。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的见解和知识。让我们一起开始这段旅程吧!
|
15天前
|
存储 缓存 前端开发
前端技术探索:从基础到进阶的旅程
【10月更文挑战第23天】前端技术探索:从基础到进阶的旅程
6 0
|
17天前
|
XML IDE Java
安卓应用开发入门:从零开始的旅程
【10月更文挑战第23天】本文将带领读者开启一段安卓应用开发的奇妙之旅。我们将从最基础的概念讲起,逐步深入到开发实践,最后通过一个简易的代码示例,展示如何将理论知识转化为实际的应用。无论你是编程新手,还是希望扩展技能的软件工程师,这篇文章都将为你提供有价值的指导和启发。
25 0
|
2月前
|
存储 JavaScript Java
深入浅出后端开发:从零到一的旅程
【9月更文挑战第10天】本文将带领读者走进后端开发的神秘世界,从基本概念到实战应用,一步步揭开后端技术的面纱。通过浅显易懂的语言和实际代码示例,我们将探索如何搭建一个简单的后端服务,理解数据库交互,并实现API的基本功能。无论你是编程新手还是希望扩展知识的开发者,这篇文章都将为你提供一条清晰的学习路径。
|
前端开发 程序员 开发者
开发者要想走更好的出路必须选全栈工程师这条路吗?
虽然说“技多不压身”,“术业有专攻”,但是作为程序员,尤其是做业务场景的开发者来说,并不是会的面越广越好,而且现在的技术迭代速度太快,不管是前端领域还是后端领域,技术栈或者技术框架更新迭代的周期越来越短、越来越快,学习成本越来越大,尤其是要做资深的全栈工程师,需要学的知识是非常的多,而且还需要各个方面的时间沉淀,考虑到人的精力会随着年龄的增长而递减,成反比例,所以虽然全栈工程师有着丰富的工作从业经验和经历,但是如果想要具备各个方面都差不多,难度是很大的。
201 1
开发者要想走更好的出路必须选全栈工程师这条路吗?
|
消息中间件 设计模式 存储
丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
丁威: 优秀程序员必备技能之如何高效阅读源码(二更)
|
前端开发 小程序 程序员
人人自媒体的时代,程序员该如何利用好自己的优势?我记住了这些神器...
无可否认,随着互联网的不断发展完善,我们现在的生活无时无刻都在与网络打交道。伴随着流量这个名词的冲击,我们对自媒体这一行业也开始了不断的摸索,基本在我的圈子里,做自媒体的太多太多了,有图...
385 0
|
人工智能 前端开发 机器人
可能是前端同学必备的 2D 游戏化互动入门基础知识
大家一起来学习2D互动最基础的知识。
可能是前端同学必备的 2D 游戏化互动入门基础知识