原來FFmpeg這么有意思(一)

前言

其實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的圖片

threemegerone.gif
onebyone.gif

想看視頻的 話點擊下面的鏈接即可
三合一視頻
二合一視頻

這個app已有下面的頁面,不過現(xiàn)在還沒有開源,還有很多地方要改。功能是實現(xiàn)了。但是頁面還有很多優(yōu)化的地方,所以啊 FFmpeg真的很牛逼。接下來我會教大家自己怎么實現(xiàn)這個功能。那么來看看做出來的視頻如何,某音好像沒有這個功能哦,

first.png
second.png
third.png
four.png

如何實現(xiàn)這種效果

這一期,我只是教大家如何通過shell 命令實現(xiàn)一個視頻畫面拼接。首先從最基礎的功能來實現(xiàn)吧。然后在根據(jù)當前的功能進行擴展。至于FFmpeg庫的編譯,一時半會兒也說不完。參數(shù)配置也很麻煩,尤其是不同的平臺坑很多。這里我就以最簡單的方式交大家如何實現(xiàn)吧

第一步

既然要做功能,第一步當然是找相應的工具了,我們可以通過FFmpeg官網找到,對應自己平臺的靜態(tài)庫,大家別下錯了哈,static binary不要下載錯了,下載成源文件了。因為官方已經給我們編譯好了靜態(tài)庫,可以直接通過shell 腳本就可以簡單的走起來。

FFmpeg官方網站庫

打開鏈接,我這邊選中的是mac os 可以看到底下提供了 static 庫。我們可以直接下載下來就行了。Ubuntu 和windows 都是一樣的 都有現(xiàn)成的庫??梢韵螺d下來。

ffmpeg static.png

下載下來就是一個這個東西。我這邊大概71M。還挺大的,因為里面官方給我們把大部分基本的功能都給編譯進去了。所以這么大,但是如果我們自己編譯的話,會小很多??梢园梢幌虏恍枰臇|西直接disable


屏幕快照 2019-03-03 下午6.39.38.png

第二步

那當然是打開我們的terminal,windows 直接win+R 然后cmd就ok,然后cd 到我們下載的ffmpeg靜態(tài)庫的文件路徑,執(zhí)行一下命令,不出意外的話,這時候你應該可以看到以下頁面

./ffmpeg

如果出現(xiàn)一下內容,說明這時候你的ffmpeg 已經ok了

屏幕快照 2019-03-03 下午6.48.23.png

如果說權限不足的話 ,cd到你的靜態(tài)庫路徑下執(zhí)行這個就可以了。加個sudo,然后在change mode 一下 賦予777權限

chmod +x  ffmpeg
chmod 777 ffmpeg

這時候ffmpeg環(huán)境已經準備好了。接下來萬事俱備只欠東風了。

第三步

視頻拼接,那么如何視頻拼接呢,不用擔心 ffmpeg 已經給我們做好了相應的封裝了。只要了解相應的命令就可以完成了最基礎的視頻拼接功能了。其實ffmpeg不僅僅如此啊,他的功能太強大了。

先簡單的來幾個命令看看,查看視頻文件信息

./ffmpeg -i input.mp4

這時候我們可以看到視頻的具體信息fps,寬高啊,視頻質量啊,等等很多信息

屏幕快照 2019-03-03 下午7.05.36.png

-i 的指令就是入?yún)⒌?,接下來我們直接看如何通過命令把一個視頻合在一起,就比如上面兩個視頻合在一起的小姐姐,我們通過電腦簡單的來合成一下。

./ffmpeg -i input2.mp4  -i input2.mp4  -filter_complex [0][1]vstack -y output.mp4 

成功的話應該是以下頁面

屏幕快照 2019-03-03 下午7.06.08.png

這一個MP4文件是同級目錄下的文件,大家可以換成自己的文件名就可以,至于filter_complex嗎?我這邊就大白話講了,就相當于我們java 中的函數(shù)一樣,你把輸入給他 在這個方法體內,把相應的輸出給你。
vstack 可以官網看到這樣的介紹 Stack input videos vertically.就是垂直拼接視頻的意思,同理如何想水平的話,只要把vstack 改成hstack就可以了,老鐵們是不是很簡單,很給力,

最主要的是自己通過命令行就可以完成一些視頻的基本操作,什么ps,Photoshop,我命令行就ok了。哈哈哈哈哈哈哈哈

剛剛作出來的視頻效果,截圖給大家看看

vstack.png

說好的小姐姐呢,tmd 這是什么鬼很可怕,博主換了個視頻 哈哈哈,但是這個效果的話產品看到會罵死人的,接下來的文章將會給大家講解如何優(yōu)化視頻效果。

Ending

希望給老鐵們帶來的是知識的儲備而不是時間的浪費。這一期就說到這里,最簡單的方式實現(xiàn)視頻畫面的拼接,下一期將會給大家?guī)砀嗟膬热荨4蠹乙部梢栽诹粞岳镎f說更想了解哪一方面的內容。我會根據(jù)大家的意見來寫,

原來FFmpeg這么有意思 (二)

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

相關閱讀更多精彩內容

  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,035評論 4 61
  • 概述 網上充斥著大量的 iOS FFmpeg 編譯的教程,有的時間比較早了,有的很多都沒有說詳細,或者有個別坑作者...
    ForestSen閱讀 27,368評論 27 187
  • 這次感冒是真滴難受。 原因和上次一樣,又是頭發(fā)沒吹干,這次更過分,頭頂心還被吹了電風扇。所謂自作孽吧。 第一天感覺...
    江江小流兒閱讀 255評論 0 0
  • 失眠的人無非兩種 一是手里拿著手機 二是腦子里有個劇場
    娜簡書閱讀 157評論 0 1
  • 不知從什么時候開始,“情懷”在人們的討論語境中慢慢變得越來越不像個褒義詞。每每說起,仿佛總有半是“將就”半是“賣老...
    pizCat閱讀 569評論 0 0

友情鏈接更多精彩內容