原來FFmpeg這麼有意思(一)

前言

其實FFmpeg你們都耳熟能詳的的一個東西了,知名的ijkplayer 就是有Bilibili開源出來的播放器也是基於FFmpeg作出來的。可是FFmpeg不只僅止於音視頻的播放裁剪功能,還能幹些更有趣的事情,就好比說視頻的畫面拼接,對於一個Android開發者來講,一想到FFmpeg c/c++是跑不掉的。下載官方庫,而後編譯成不一樣平臺的so,而後在經過jni集成到項目中,這一個開頭就難倒了很多開發者。一個問題是如何編譯出這個so。如何把編譯好的文件集成到項目中。這個我以後的文章會詳細說明,這裏我只和你們說說有趣在哪裏。html

說道這裏 我不得不說,如今各個大廠都在作統一前端的開發語言和框架,搞得開發者TMD頭都大,其實不仍是作得都是一些UI頁面而已,經過不一樣的方式渲染而已,若是真的要作一些定製化的功能,仍是離開不了原生。前端

Android FFmpeg視頻畫面拼接

經過標題你們可能仍是不太明白啥意思,我就上幾張我作的這個App的截圖吧,順便放幾張動態圖,可能你們能知道個大概功能。其實你們看了以後,可能感受感受市面上已經有作到了這種效果的App了,可是做爲一個Android攻城獅,必需要知道他是怎麼作出來的,在ios上作這種效果很容易,有原生的Api提供,可是苦逼的Android 那隻能經過C/C++來實現,原生搞的話很難。java

這個App大概有如下功能(目前並未開源,項目地址ios

  • 視頻畫面拼接(主要的)
  • 視頻寬高裁剪
  • 視頻時長裁剪
  • 添加視頻邊框及修改邊框顏色
  • 添加視頻封面
  • 添加視頻背景圖片
  • 添加視頻水印
  • 添加背景音樂

下面是App作出來的兩個視頻轉gif的圖片c++

threemegerone.gif

onebyone.gif

想看視頻的 話點擊下面的連接便可 三合一視頻 二合一視頻git

這個app已有下面的頁面,不過如今尚未開源,還有不少地方要改。功能是實現了。可是頁面還有不少優化的地方,因此啊 FFmpeg真的很牛逼。接下來我會教你們本身怎麼實現這個功能。那麼來看看作出來的視頻如何,某音好像沒有這個功能哦,github

first.png

second.png

third.png

four.png

如何實現這種效果

這一期,我只是教你們如何經過shell 命令實現一個視頻畫面拼接。首先從最基礎的功能來實現吧。而後在根據當前的功能進行擴展。至於FFmpeg庫的編譯,一時半會兒也說不完。參數配置也很麻煩,尤爲是不一樣的平臺坑不少。這裏我就以最簡單的方式交你們如何實現吧shell

第一步

既然要作功能,第一步固然是找相應的工具了,咱們能夠經過FFmpeg官網找到,對應本身平臺的靜態庫,你們別下錯了哈,static binary不要下載錯了,下載成源文件了。由於官方已經給咱們編譯好了靜態庫,能夠直接經過shell 腳本就能夠簡單的走起來。windows

FFmpeg官方網站庫bash

打開連接,我這邊選中的是mac os 能夠看到底下提供了 static 庫。咱們能夠直接下載下來就好了。Ubuntu 和windows 都是同樣的 都有現成的庫。能夠下載下來。

ffmpeg static.png

下載下來就是一個這個東西。我這邊大概71M。還挺大的,由於裏面官方給咱們把大部分基本的功能都給編譯進去了。因此這麼大,可是若是咱們本身編譯的話,會小不少。能夠吧一下不須要的東西直接disable

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

第二步

那固然是打開咱們的terminal,windows 直接win+R 而後cmd就ok,而後cd 到咱們下載的ffmpeg靜態庫的文件路徑,執行一下命令,不出意外的話,這時候你應該能夠看到如下頁面

./ffmpeg
複製代碼

若是出現一下內容,說明這時候你的ffmpeg 已經ok了

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

若是說權限不足的話 ,cd到你的靜態庫路徑下執行這個就能夠了。加個sudo,而後在change mode 一下 賦予777權限

chmod +x  ffmpeg
chmod 777 ffmpeg
複製代碼

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

第三步

視頻拼接,那麼如何視頻拼接呢,不用擔憂 ffmpeg 已經給咱們作好了相應的封裝了。只要瞭解相應的命令就能夠完成了最基礎的視頻拼接功能了。其實ffmpeg不只僅如此啊,他的功能太強大了。

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

./ffmpeg -i input.mp4
複製代碼

這時候咱們能夠看到視頻的具體信息fps,寬高啊,視頻質量啊,等等不少信息

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

-i 的指令就是入參的,接下來咱們直接看如何經過命令把一個視頻合在一塊兒,就好比上面兩個視頻合在一塊兒的小姐姐,咱們經過電腦簡單的來合成一下。

./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 中的函數同樣,你把輸入給他 在這個方法體內,把相應的輸出給你。 vstack 能夠官網看到這樣的介紹 Stack input videos vertically.就是垂直拼接視頻的意思,同理如何想水平的話,只要把vstack 改爲hstack就能夠了,老鐵們是否是很簡單,很給力,

最主要的是本身經過命令行就能夠完成一些視頻的基本操做,什麼ps,Photoshop,我命令行就ok了。哈哈哈哈哈哈哈哈

剛剛做出來的視頻效果,截圖給你們看看

vstack.png

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

Ending

但願給老鐵們帶來的是知識的儲備而不是時間的浪費。這一期就說到這裏,最簡單的方式實現視頻畫面的拼接,下一期將會給你們帶來更多的內容。你們也能夠在留言裏說說更想了解哪一方面的內容。我會根據你們的意見來寫,

原來FFmpeg這麼有意思 (二)

相關文章
相關標籤/搜索