提到音視頻編輯方案,大家最容易搜到的可能是ffmpeg這個牛X的開源方案。ffmpeg 是基於C語言的著名視頻編解碼方案。國內有也有不少的公司將ffmpeg 移植到iOS和android 平台進行視頻處理,例如,美拍、秒拍等。但是其實iOS和Android自帶的多媒體框架一點也不比ffmpeg弱。下面就中常遇到的問題談一談在安卓視頻編輯上面的經驗分享。
一.做Android視頻編輯的可行性開源方案有哪些?
第一個就是大家熟知的ffmpeg,將ffmpeg移植到anroid平台,編譯成so文件,由jni 調用,可以實現音視頻的分離、裁剪、拼合、加字幕、濾鏡等功能。
第二個就是android 自帶的MediaCodec 框架,MediaCodec框架底層調用的是StageFright庫,StageFright庫是默認封裝在android系統里面的。
第三個,如果只是做視頻音頻混合的話,可以用這個開源工程mp4parser。
二.這幾種框架的優缺點各有哪些?
分析優缺點,那么就從功能多少、學習門檻、運行效率、穩定性、打包占用空間這幾個方面來總結一下。
a.功能多少方面:
ffmpeg 無疑排第一位,他集合了視頻編解碼、視頻濾鏡、流媒體推流、音頻各種特效等等,基本上你能想到的功能都在里面。
第二位當是Android的親兒子,MediaCodec。MediaCodec涵蓋了音視頻解復用、音頻解碼、視頻解碼、音頻編碼、視頻編碼、音視頻合並的整個流程。跟ffmpeg相比,MediaCodec 更接近底層硬件。這個方案如果想要實現視頻的濾鏡、字幕、拼接等功能的話,需要自己配合OpenGL ES 來實現,另外,音視頻拼接的話,要考慮到不同音頻采樣率的重采樣問題,音頻重采用問題,需要懂得傅立葉變換相關的離散信號變換方法,如果要實現音頻特效,如變聲、均衡器的話,也需要懂得上述信號變換方法。因此,很少公司會采用。
第三位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,開發包同樣非常小。
三、現有的免費開源方案和收費商業方案介紹。
基於ffmpeg 的免費軟解軟編方案在github.com有很多,例如:EpMedia,硬解硬編方案還沒有看到。商業收費的方案有趣拍、美攝等。不過這些商業方案是按年收費的有點小貴。
基於MediaCodec 的免費開源方案有m4m,videotranscoder等,不過這些開源方案,表面看上去功能很強大,實際使用的時候會遇到不少坑,只適用於對MediaCodec的原理進行研究。目前尚未發現一個開源成熟的MediaCodec項目。做MediaCodec成熟商業方案的有七牛、美視這兩家。其中,七牛的商業方案,筆者親測,到目前為止,還有一些明顯的bug,可能是起步比較晚吧,請謹慎使用。
近期打算做一個更詳細的短視頻編輯方案對比分析,更多移動短視頻編輯的方面的經驗,請關注筆者。