实现VideoEditor相关功能需要哪些三方库

最近正在整理VideoEditor中相机处理相关的功能,接下来会讲到视频录制、声音采集相关的模块,需要用到音视频编码,在此之前,需要先将VideoEditor中涉及到的三方库拎出来讲一讲,如果不把VideoEditor所使用的的三方库先讲一下,后面的一系列文章大家可能会云里雾里的。

先说明一下,我的文章不会罗列代码,我觉得没有用,因为对于想看你文章的人来说,最想知道的是思想,你在解决这个问题的时候是怎么想的?有什么心得体会?有什么难点?你能给别人传递不一样的思想就能证明这篇文章的价值。以后的文章都会遵循这样的原则。

这里还是要啰嗦一句,VideoEditor需要实现哪些功能?搞清楚需要实现哪些功能,才明白需要引入哪些库?为什么要引入这个库?Android或者iOS原生的方案有什么缺陷。VideoEditor其实主要要处理四种元素:

  • 视频
    • 解封装/重新封装:支持主流的封装格式就行了,例如MP4、MKV、AVI等等。需要引入ffmpeg中的MOV、MP4封装,记得加上特定的bsf格式就行。
    • 解码/编码:目前主流的编解码是H264,当然也可以支持HEVC。正常使用硬解码和硬编码就行了,但是还需要引入软解码和软编码兼容一下,libx264和libx265
    • YUV转RGB:可以使用OpenGL-shader转换,也可以引入libyuv或者ffmpeg中的swscale进行转换。
  • 图片
    • 图片转成纹理:既可以使用OpenGL直接转成纹理,也可以引入stb库转换。stb可以转成纹理和裁剪纹理。
    • 基本格式支持:PNG/JPEG/GIF/HEIF/WEBP格式。正常情况下都可以支持JPEG和PNG格式,GIF/HEIF/WEBP需要引入额外的库。
  • 声音/音乐
    • 解封装/重新封装:音频或者音乐文件的封装格式主要是aac、mp3、wav,其他的小众格式opus、flac基本可以忽略,用得不多。
    • 解码/编码:现在的VideoEditor主要采用fdk-aac编码,引入libfdk-aac库即可。
    • 重采样:ffmpeg中的swr模块可以解决音频重采样的问题。
    • 变速变调:处理变速情况下的声音的库,一般有sonic或者soundtouch,各有优劣。
  • 文字
    • 实现花字、艺术字:需要引入字体库freetype,还有harfbuzz库。
图片

Android其实也提供了一批原生的音视频相关的类:MediaCodec、MediaExtractor、MediaMetadataRetriever等等,这些类可以实现部分解封装、解码的部分功能,也有一些问题,例如存在一些兼容性问题、功能实现不全、格式支持不全等等。完全在Java层完成一个VideoEditor,不仅不现实,而且不可能,所以各家在招收音视频工程师时都会要求考察C++,当然不会C++并不能阻止你成为一个音视频工程师,语言只是一个工具,你如果对底层原理有较深的理解的话,语言这种东西可以后天学习的。

下面列出了三方库的下载地址:

  • ffmpeg: https://github.com/FFmpeg/FFmpeg
  • libx264: https://code.videolan.org/videolan/x264
  • libx265: https://github.com/videolan/x265
  • fdk-aac: https://github.com/mstorsjo/fdk-aac
  • sonic: https://github.com/valeriansaliou/sonic
  • soundtouch: http://soundtouch.surina.net/
  • stb: https://github.com/nothings/stb
  • freetype2: https://github.com/aseprite/freetype2
  • harfbuzz: https://github.com/harfbuzz/harfbuzz

当然上面只是实现VideoEditor的基本的库,你如果想实现一些较为高级的功能,还需要一些算法,人脸识别、模型分割、动态插帧、超分算法,还有一些高级的渲染方式,这都是VideoEditor的加分项。这些应用的介绍都会在VideoEditor项目中介绍的。

如果你想要上面三方库的编译脚本:建议参考:https://github.com/JeffMony/JianYing。如果你还有其他的问题,可以私信留下你的问题,我们一起交流。

作者:音视频平凡之路

版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。

(0)

发表回复

登录后才能评论