Qt能做什么?其实大部分都是一些c++最擅长的领域,客户端软件,工具软件。
Qt最擅长什么?这个看主流的行业巨头,比如Autodesk的3D建模动画软件maya, Adobe的3D贴图绘制软件SubstancePainter,音视频剪辑软件三巨头之一达芬奇。这三家都是行业垄断巨头之一,所以2010年之后,我们说Qt开发过什么软件,就不能只说vlc,googleEarth了。
甚至你跑到开源社区去看,80%以上的视频剪辑软件,都是会用Qt来写。前几天看某短视频公司的免费PC/mac客户端视频剪辑软件,也用Qt。为什么,因为擅长干这个。而且最主要的是跨平台,开发一次,同时部署windows+macOS(千万别小看macOS 8%的市场份额,主流的商业软件,都会去抢这8%的高净值人群市场,而且都愿意付费。北美,一些欧洲国家macOS份额甚至超过50%)。大部分游戏引擎场景编辑工具,也是Qt来写。
如果你仅仅把Qt在Windows上当MFC用,那就没发挥出它应有的优势。仅仅说比MFC好用一点。
所以综上,Qt最擅长的其实是 工具软件,3D工业级软件,设计软件。音视频数字图像处理软件。而且这话不是我说的,而是整个行业,从2010年以后,十多年,商业公司,包括几亿用户验证下来的。
当然,Qt作为一个非常重要的写界面和c++业务的开发框架,仅仅用Qt,是干不了这些复杂的软件的。开发音视频,视频剪辑软件,还需要学习音视频开发。音视频开发,也包括很多内容。所以,写过两三年Qt普通界面业务的程序员,可以进一步深入学习Qt更专业的开发,音视频数字图像处理。这个领域,有非常庞大的就业机会,入门级别的年薪30k+, 高阶可以达到50K+级别。
回到我们今天要讨论的主题:视频剪辑,贴纸特效背后的技术。我们分为几个重要的点。
1 FFmpeg音视频开发基础。FFmpeg库,编解码,音视频同步,播放器,aac,封装mp4等。
2 OpenGL数字图像处理渲染引擎开发。你看到的所有市面上的视频特效,都基于OpenGL/ES。
3 OpenCV机器学习,人脸标定. 如果我们要做美颜,人脸贴纸,3D表情动画,我们就要做人脸
当然这方面你也可以不自己做,用第三方SDK。当然也有开源的,自己训练下,也能得到很好
效果。
我们今天主要讨论第一,第二点。
如果你做视频剪辑软件,那么如何打开一个视频,对视频接封装,解码出YUV/RGB这样的图片,就是第一步。解码出这些图片,具体怎么在界面上体现出来,进行时间线操作,这个就需要自己用c++ 写一套业务对整个操作流程做一些抽象。第二步,对这些图片进行处理,这些处理包括专场,特效,叠加文字什么的。这个就是OpenGL的天下了。第三步,就是对处理后的图片导出编码写成mp4这种视频。这是一个大概的过程。
如果你在写一个实时的人脸特效,贴纸,表情,动画,第一步同样是从摄像头得到YUV/RGB。第二步,交给OpenGL, 这里我们可以自己去实现一个渲染引擎。场景中除了视频,还可以渲染大量的2D,3D元素。 第三步,同样是实时导出,写mp4. 当然,如果你做成短视频,也可以推流,这就类似当前比较流行的那些短视频人脸特效直播推流。
主要的流程我们画成一个图:其实两种软件整个过程都差不多。
这就是我们讨论的当前最前沿的一些音视频数字图像处理开发的一些技术。
我们经常有同学问,如何在视频上添加水印?如何在视频上添加一些图片,文字,特效。其实我的回答,就是最方便的其实是OpenGL.
当然绝大多数同学说,OpenGL? AVFilter不行吗?其实也行,但那是十年前普遍的处理方式。 OpenGL难学? 其实不难。 大学的线形代数,矩阵不会?其实也不难。学习能力强的,一两周时间就可以掌握基础的OpenGL。然后花上一年半载,写两个相关的项目,就彻底深入理解了OpenGL。如果你没学过OpenGL,那即使你写过再多代码,也真是难为了,真看不懂。
当你学会了OpenGL这把瑞士军刀,那么xxx引擎就该扔了。不需要那么庞大的东西,我们写的东西要短小精悍,在引擎的底层做任意的骚操作,游刃有余。
最后超哥最近开发了一个课程:音视频数字图像处理系列。Qt版本已经上线。教你跑通整个流程。
课程链接:https://ke.qq.com/course/3615377?tuin=938801ec
后面我们会陆续上线Android版,iOS版本的课程。有同学说超哥你疯了吧,你怎么什么都会,其实也不是的,纯c++天然跨平台(Qt也可移植,但移动端不够专业)。掌握下别的平台开发工具,就能轻松移植。音视频开发,到最后,大量的底层代码是可移植的。