Android 音視頻編輯經驗總結及開源工程分享

       提到音視頻編輯方案,你們最容易搜到的多是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 的免費開源方案有m4mvideotranscoder等,不過這些開源方案,表面看上去功能很強大,實際使用的時候會遇到很多坑,只適用於對MediaCodec的原理進行研究。目前還沒有發現一個開源成熟的MediaCodec項目。作MediaCodec成熟商業方案的有七牛美視這兩家。其中,七牛的商業方案,筆者親測,到目前爲止,還有一些明顯的bug,多是起步比較晚吧,請謹慎使用。

      近期打算作一個更詳細的短視頻編輯方案對比分析,更多移動短視頻編輯的方面的經驗,請關注筆者。

相關文章
相關標籤/搜索