FFmpeg是什么,通俗的说,在看片子的时候,需要用到视频播放器,而很多视频播放器的底层用的就是FFmpeg。这是我在2019年在FFmpeg深度学习模块中所做事情的总结,由于我在19年是这个模块的主要贡献者,所以,这个总结也差不多就是FFmpeg深度学习模块的现状总结了。
在2018年的时候,Pedro Arthur ([email protected])带着学生Sergey Lavrushkin ([email protected])完成了一个GSoC项目,将TensorFlow引入FFmpeg,并且增加了一个超分辨率(super resolution)的video filer(vf_sr.c),来演示如何使用深度学习模型。
这里简单介绍一下GSoC,即Google Summer of Code,是Google公司赞助的项目,每年一次,到2020年将是第16次,用来鼓励学生参与各种开源项目的实际代码开发(不限于Google的开源项目,当然此项目也需要Google的同意),还有一定的经济资助。如果你是学生身份,强烈建议尽量参加。
回到FFmpeg,在18年的时候,我参与了这个模块的讨论,当时我的想法是,支持各种深度学习框架的模型,根据传入模型的类型,再调用相应的深度学习框架在后端加载执行。在今天事后来看,这个建议存在的一个问题是,有些深度学习框架没有提供C接口(可能提供了C++接口),而FFmpeg社区要求使用C接口,这个问题我现在也还没有解决方法。另外,我当时还建议把这个作为单独的模块,或者起码放在libavutil中,但是,最终还是放在了libavfilter目录下面,因为考虑到目前主要是被filter调用。
最后完成的代码支持深度学习框架TensorFlow,FFmpeg可以接受TensorFlow的网络模型文件(.pb),准备好输入输出后,再在后端调用TensorFlow的C库文件加载并执行这个模型。另外,考虑到某些系统可能没有Tenso