前言
其實FFmpeg大家都耳熟能詳?shù)牡囊粋€東西了,知名的ijkplayer 就是有Bilibili開源出來的播放器也是基于FFmpeg做出來的。但是FFmpeg不僅僅止于音視頻的播放裁剪功能,還能干些更有趣的事情,就比如說視頻的畫面拼接,對于一個Android開發(fā)者來說,一想到FFmpeg c/c++是跑不掉的。下載官方庫,然后編譯成不同平臺的so,然后在通過jni集成到項目中,這一個開頭就難倒了不少開發(fā)者。一個問題是如何編譯出這個so。如何把編譯好的文件集成到項目中。這個我之后的文章會詳細說明,這里我只和大家說說有趣在哪里。
說道這里 我不得不說,現(xiàn)在各個大廠都在做統(tǒng)一前端的開發(fā)語言和框架,搞得開發(fā)者TMD頭都大,其實不還是做得都是一些UI頁面而已,通過不同的方式渲染而已,如果真的要做一些定制化的功能,還是離開不了原生。
Android FFmpeg視頻畫面拼接
通過標題大家可能還是不太明白啥意思,我就上幾張我做的這個App的截圖吧,順便放幾張動態(tài)圖,可能大家能知道個大概功能。其實大家看了之后,可能感覺感覺市面上已經有做到了這種效果的App了,但是作為一個Android攻城獅,必須要知道他是怎么做出來的,在ios上做這種效果很容易,有原生的Api提供,但是苦逼的Android 那只能通過C/C++來實現(xiàn),原生搞的話很難。
這個App大概有以下功能(目前并未開源,項目地址)
- 視頻畫面拼接(主要的)
- 視頻寬高裁剪
- 視頻時長裁剪
- 添加視頻邊框及修改邊框顏色
- 添加視頻封面
- 添加視頻背景圖片
- 添加視頻水印
- 添加背景音樂
下面是App做出來的兩個視頻轉gif的圖片
這個app已有下面的頁面,不過現(xiàn)在還沒有開源,還有很多地方要改。功能是實現(xiàn)了。但是頁面還有很多優(yōu)化的地方,所以啊 FFmpeg真的很牛逼。接下來我會教大家自己怎么實現(xiàn)這個功能。那么來看看做出來的視頻如何,某音好像沒有這個功能哦,
如何實現(xiàn)這種效果
這一期,我只是教大家如何通過shell 命令實現(xiàn)一個視頻畫面拼接。首先從最基礎的功能來實現(xiàn)吧。然后在根據(jù)當前的功能進行擴展。至于FFmpeg庫的編譯,一時半會兒也說不完。參數(shù)配置也很麻煩,尤其是不同的平臺坑很多。這里我就以最簡單的方式交大家如何實現(xiàn)吧
第一步
既然要做功能,第一步當然是找相應的工具了,我們可以通過FFmpeg官網找到,對應自己平臺的靜態(tài)庫,大家別下錯了哈,static binary不要下載錯了,下載成源文件了。因為官方已經給我們編譯好了靜態(tài)庫,可以直接通過shell 腳本就可以簡單的走起來。
打開鏈接,我這邊選中的是mac os 可以看到底下提供了 static 庫。我們可以直接下載下來就行了。Ubuntu 和windows 都是一樣的 都有現(xiàn)成的庫??梢韵螺d下來。
下載下來就是一個這個東西。我這邊大概71M。還挺大的,因為里面官方給我們把大部分基本的功能都給編譯進去了。所以這么大,但是如果我們自己編譯的話,會小很多??梢园梢幌虏恍枰臇|西直接disable
第二步
那當然是打開我們的terminal,windows 直接win+R 然后cmd就ok,然后cd 到我們下載的ffmpeg靜態(tài)庫的文件路徑,執(zhí)行一下命令,不出意外的話,這時候你應該可以看到以下頁面
./ffmpeg
如果出現(xiàn)一下內容,說明這時候你的ffmpeg 已經ok了
如果說權限不足的話 ,cd到你的靜態(tài)庫路徑下執(zhí)行這個就可以了。加個sudo,然后在change mode 一下 賦予777權限
chmod +x ffmpeg
chmod 777 ffmpeg
這時候ffmpeg環(huán)境已經準備好了。接下來萬事俱備只欠東風了。
第三步
視頻拼接,那么如何視頻拼接呢,不用擔心 ffmpeg 已經給我們做好了相應的封裝了。只要了解相應的命令就可以完成了最基礎的視頻拼接功能了。其實ffmpeg不僅僅如此啊,他的功能太強大了。
先簡單的來幾個命令看看,查看視頻文件信息
./ffmpeg -i input.mp4
這時候我們可以看到視頻的具體信息fps,寬高啊,視頻質量啊,等等很多信息
-i 的指令就是入?yún)⒌?,接下來我們直接看如何通過命令把一個視頻合在一起,就比如上面兩個視頻合在一起的小姐姐,我們通過電腦簡單的來合成一下。
./ffmpeg -i input2.mp4 -i input2.mp4 -filter_complex [0][1]vstack -y output.mp4
成功的話應該是以下頁面
這一個MP4文件是同級目錄下的文件,大家可以換成自己的文件名就可以,至于filter_complex嗎?我這邊就大白話講了,就相當于我們java 中的函數(shù)一樣,你把輸入給他 在這個方法體內,把相應的輸出給你。
vstack 可以官網看到這樣的介紹 Stack input videos vertically.就是垂直拼接視頻的意思,同理如何想水平的話,只要把vstack 改成hstack就可以了,老鐵們是不是很簡單,很給力,
最主要的是自己通過命令行就可以完成一些視頻的基本操作,什么ps,Photoshop,我命令行就ok了。哈哈哈哈哈哈哈哈
剛剛作出來的視頻效果,截圖給大家看看
說好的小姐姐呢,tmd 這是什么鬼很可怕,博主換了個視頻 哈哈哈,但是這個效果的話產品看到會罵死人的,接下來的文章將會給大家講解如何優(yōu)化視頻效果。
Ending
希望給老鐵們帶來的是知識的儲備而不是時間的浪費。這一期就說到這里,最簡單的方式實現(xiàn)視頻畫面的拼接,下一期將會給大家?guī)砀嗟膬热荨4蠹乙部梢栽诹粞岳镎f說更想了解哪一方面的內容。我會根據(jù)大家的意見來寫,