提到音视频编辑方案,你们最容易搜到的多是ffmpeg这个牛X的开源方案。ffmpeg 是基于C语言的著名视频编解码方案。国内有也有很多的公司将ffmpeg 移植到iOS和android 平台进行视频处理,例如,美拍、秒拍等。可是其实iOS和Android自带的多媒体框架一点也不比ffmpeg弱。下面就中常遇到的问题谈一谈在安卓视频编辑上面的经验分享。java
一.作Android视频编辑的可行性开源方案有哪些?android
第一个就是你们熟知的ffmpeg,将ffmpeg移植到anroid平台,编译成so文件,由jni 调用,能够实现音视频的分离、裁剪、拼合、加字幕、滤镜等功能。git
第二个就是android 自带的MediaCodec 框架,MediaCodec框架底层调用的是StageFright库,StageFright库是默认封装在android系统里面的。github
第三个,若是只是作视频音频混合的话,能够用这个开源工程mp4parser。框架
二.这几种框架的优缺点各有哪些?ide
分析优缺点,那么就从功能多少、学习门槛、运行效率、稳定性、打包占用空间这几个方面来总结一下。学习
a.功能多少方面:ui
ffmpeg 无疑排第一位,他集合了视频编解码、视频滤镜、流媒体推流、音频各类特效等等,基本上你能想到的功能都在里面。编码
第二位当是Android的亲儿子,MediaCodec。MediaCodec涵盖了音视频解复用、音频解码、视频解码、音频编码、视频编码、音视频合并的整个流程。跟ffmpeg相比,MediaCodec 更接近底层硬件。这个方案若是想要实现视频的滤镜、字幕、拼接等功能的话,须要本身配合OpenGL ES 来实现,另外,音视频拼接的话,要考虑到不一样音频采样率的重采样问题,音频重采用问题,须要懂得傅立叶变换相关的离散信号变换方法,若是要实现音频特效,如变声、均衡器的话,也须要懂得上述信号变换方法。所以,不多公司会采用。code
第三位mp4praser,能够实现音视频编解码及编辑。
b.学习门槛:
若是只是作视频转码、加文字、图片特效等,ffmpeg和MediaCodec 旗鼓至关,mp4parser最低(可是基于mp4parser的资料比较少,其实也未必)。若是是要拼接视频、作音频 的变声、均衡器特效的话,MediaCodec是难度最高的,由于这一切须要你从底层原理作起。
c、运行效率:MediaCodec硬解硬编最快,ffmpeg硬解硬编方案稍慢,mp4parser(只能软解软编)最慢。
d、稳定性: MediaCodec和ffmpeg 的硬解硬编方案旗鼓至关,mp4parser在低配的机器上可能出现卡顿的问题。
f、打包占用空间:国内最得最好的ffmpeg硬解硬编方案,其so文件在10.几M,MediaCodec因为是纯java 代码,占用空间很容易作到几百K甚至几十K。mp4parser也是纯Java,开发包一样很是小。
3、现有的免费开源方案和收费商业方案介绍。
基于ffmpeg 的免费软解软编方案在github.com有不少,例如:EpMedia,硬解硬编方案尚未看到。商业收费的方案有趣拍、美摄等。不过这些商业方案是按年收费的有点小贵。
基于MediaCodec 的免费开源方案有m4m,videotranscoder等,不过这些开源方案,表面看上去功能很强大,实际使用的时候会遇到很多坑,只适用于对MediaCodec的原理进行研究。目前还没有发现一个开源成熟的MediaCodec项目。作MediaCodec成熟商业方案的有七牛、美视这两家。其中,七牛的商业方案,笔者亲测,到目前为止,还有一些明显的bug,多是起步比较晚吧,请谨慎使用。
近期打算作一个更详细的短视频编辑方案对比分析,更多移动短视频编辑的方面的经验,请关注笔者。