FFmpeg開發(fā)筆記(一百零一)跨平臺的開源音視頻移動框架MobileFFmpeg

《FFmpeg開發(fā)實戰(zhàn):從零基礎(chǔ)到短視頻上線》一書的“第 12 章 FFmpeg的移動開發(fā)”介紹了如何使用FFmpeg在手機(jī)上剪輯視頻,方便開發(fā)者更好地開發(fā)類似剪映那樣的視頻剪輯軟件。那么在移動系統(tǒng)上還有一款跨平臺的開源音視頻框架MobileFFmpeg,通過該框架可以很方便地執(zhí)行音視頻加工操作,下面就來介紹如何在App工程中使用MobileFFmpeg。

MobileFFmpeg 是一款專為 Android、iOS 和 tvOS 移動平臺開發(fā)的開源音視頻處理框架。它的核心作用是將強(qiáng)大的 FFmpeg 工具鏈移植到移動端,并提供簡潔的上層 API,讓開發(fā)者無需復(fù)雜的底層編譯和 JNI 操作,就能在 App 里實現(xiàn)專業(yè)級的音視頻編輯、轉(zhuǎn)碼與處理。

MobileFFmpeg幾乎能實現(xiàn)電腦端 FFmpeg 的所有功能,包括:

1、格式轉(zhuǎn)換:MP4、AVI、MKV、MOV、GIF 等互轉(zhuǎn)。

2、視頻編輯:裁剪、拼接、旋轉(zhuǎn)、加水印、加字幕、倍速播放。

3、音頻處理:提取音頻、混音、降噪、格式轉(zhuǎn)換(MP3、AAC、WAV)。

4、編碼解碼:支持 H.264 (x264)、H.265 (x265)、VP9 等主流編解碼器。

5、濾鏡特效:亮度、對比度、模糊、銳化、防抖等。

6、媒體信息:獲取視頻分辨率、碼率、時長、編碼格式等。

MobileFFmpeg的源碼托管地址為https://github.com/tanersener/mobile-ffmpeg(星星數(shù)4.1k),最新版本是2021年2月發(fā)布的v4.4(源碼倉庫在2025年1月被打包,目前為只讀狀態(tài)),該版本的源碼下載地址為https://github.com/tanersener/mobile-ffmpeg/archive/refs/tags/v4.4.LTS.tar.gz。?

由于v4.4版本的MobileFFmpeg發(fā)布時間較早,為了讓小海豚版本的Android Studio Dolphin能夠打開它的范例工程,需要對MobileFFmpeg的android工程作如下修改:

一、升級Gradle版本

打開android目錄下的gradle/wrapper/gradle-wrapper.properties,把下面這行配置

gradle-6.1.1-all.zip

改成如下這行配置,表示把Gradle版本從6.1.1升級到6.7.1。

gradle-6.7.1-bin.zip

二、更新工具庫的倉庫位置

打開android目錄下的build.gradle,把里面的兩處“jcenter()”都改為以下配置:

google()

mavenCentral()

因為jcenter倉庫已經(jīng)廢棄,所以改成引用國內(nèi)的倉庫位置。

三、調(diào)整模塊級別的build.gradle

打開android/app目錄下的build.gradle,把下面這行配置

? ? ndkVersion "21.3.6528147"

改成下面這行,也就是注釋掉ndk配置:

? ? //ndkVersion "21.3.6528147"

四、修改臨時目錄的保存路徑

打開android/test-app/src/main/java/com/arthenica/mobileffmpeg/test/VideoTabFragment.java,把encodeVideo方法內(nèi)部的下面代碼

final File image1File = new File(requireContext().getCacheDir(), "colosseum.jpg");

final File image2File = new File(requireContext().getCacheDir(), "pyramid.jpg");

final File image3File = new File(requireContext().getCacheDir(), "tajmahal.jpg");

改為下面代碼,也就是更換臨時目錄的保存路徑:

String privatePath = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();

final File image1File = new File(privatePath, "colosseum.jpg");

final File image2File = new File(privatePath, "pyramid.jpg");

final File image3File = new File(privatePath, "tajmahal.jpg");

接著把getVideoFile方法內(nèi)部的下面代碼

final String video = "video." + extension;

return new File(requireContext().getFilesDir(), video);

改為下面代碼,同樣是更換臨時目錄的保存路徑:

String privatePath = requireContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).toString();

final String video = "video." + extension;

return new File(privatePath, video);

以上修改的目的是把臨時目錄改到應(yīng)用自身的私有空間,避免訪問公共空間出現(xiàn)未授權(quán)的異常。

修改以上配置和代碼之后,等待MobileFFmpeg工程編譯通過,把主入口的test-app模塊安裝到手機(jī)上,啟動之后的App界面如下圖所示:

MobileFFmpeg默認(rèn)支持VP8和MPEG-4等視頻編碼器,先在界面上方切換到VIDEO標(biāo)簽,再點(diǎn)擊界面中間的【ENCODE】按鈕,app會把下方的演示圖片自動轉(zhuǎn)為一小段視頻,轉(zhuǎn)換過程如下圖所示:

MobileFFmpeg也支持mp3、vorbis、opus等常見的音頻編碼器,比如先在界面上方切換到AUDIO標(biāo)簽,再點(diǎn)擊界面中間的【ENCODE】按鈕,界面下方會顯示mp3音頻的轉(zhuǎn)換日志,如下圖所示:

可見MobileFFmpeg支持視頻轉(zhuǎn)碼、音頻轉(zhuǎn)碼等常見的音視頻加工操作,以及更多的命令行處理功能。

更多詳細(xì)的FFmpeg開發(fā)知識參見《FFmpeg開發(fā)實戰(zhàn):從零基礎(chǔ)到短視頻上線》一書。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容