iOS 利用FFmpeg 開發音視頻流(一)——Mac 系統上編譯 FFmpeg

說到 FFmpeg,大家都知道這個怪物一開始就是用來做視頻播放器的,之所以這么受歡迎,是因為其解碼手段非常牛,簡單點說,就是不支持的播放格式很少,這當然就成了很多做視頻相關開發的小伙伴為之傾慕了。

博主今天來給大家科普一下怎么優雅的使用 FFmpeg 這個讓做視頻相關的程序員又愛又恨的庫,今天第一編,我們就來點簡單的,在 Mac 上利用 FFmpeg 將 fly 格式轉成 成 mp4格式,這個技巧這么實用,相信各位小伙伴都會為之喜好吧,那么我們首先得準備好工具了。

工具:
1.Xcode
2.homebrew

沒錯,就是這兩個工具這么簡單,那我們按部就班,好好說一下該如何做,該如何優雅的編譯~。

1、安裝 Xcode

首先你得有一只 Xcode,什么?你沒有 Xcode?趕緊用大師球去捕捉呀!這里我就不在說 Xcode 如何安裝了(PS: AppStore就可以了)。
那為什么要安裝 Xcode 呀?

`XCode`提供了Mac平臺開發環境必須的gcc編譯器,要注意的是`XCode` 安裝后并沒有命令行的gcc可用,
還需要打開`XCode`,在某個設置里添加Command Line Tools,`XCode`就會自動下載并安裝好gcc,
同時還有git也被安裝了。

2、安裝 homebrew

homebrew 是什么?

`homebre` 是 Mac 平臺上的一個包管理工具,提供了許多 Mac 下沒有的 Linux工具等,
而且安裝工具極其簡單,一句命令行 gameOver。

那么,我們該如何安裝 homebrew 或我該如何知道自己是否安裝了 homebrew 呢?

1)打開終端, 輸入 brew,得到的結果如下,則恭喜,你已獲得 homebrew 一只我們直接跳過第二步吧。

檢測是否安裝homebrew

2)看到這里,就說明你并沒有安裝 homebrew 了,我們繼續在終端上輸入以下下命令行:

ruby -e “$(curl -fsSL [https://raw.githubusercontent.com/Homebrew/install/master/install](https://raw.githubusercontent.com/Homebrew/install/master/install))”

當這個命令執行完后,再重復 1)我們就可以知道是否已經安裝成功了。


3、安裝 FFmpeg

ffmpeg的官方網站是:http://ffmpeg.org/
什么?我們要去官網 download 嗎?我們是優雅的編譯好嗎,我們沒有這么 low~。
1)利用我們上面的 homebrew,在終端輸入以下命令行:

brew install ffmpeg

2)當命令執行完畢,我們再輸入:

brew info ffmpeg
ffmpeg info

看到以上這一大堆東西,我就知道我已經安裝完畢了,只是正如大家所見,有很多選擇庫博主并沒有安裝。

當然,如果小伙伴們日后想升級 ffmpeg,可以輸入以下命令行:

 brew update && brew upgrade ffmpeg

經過這3步,我們現在就可以使用ffmpeg的強大功能了。

4、轉換視頻格式

首先我們準備好一個 .flv 格式的小視頻,然后我們的目標是要將這個 .flv 格式的小視頻轉換成 .mp4 格式的小視頻, 并將其碼率設置為 640kbps。


.flv 格式的小視頻

1)打開終端,輸入以下命令行:

ffmpeg -i 天臺愛情故事.flv -b:v 640k 天臺愛情故事.mp4  

只見終端啪啪啪的輸出以下:

ffmpeg version 2.6.3 Copyright (c) 2000-2015 the FFmpeg developers
  built with Apple LLVM version 7.0.2 (clang-700.1.81)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/2.6.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda
  libavutil      54. 20.100 / 54. 20.100
  libavcodec     56. 26.100 / 56. 26.100
  libavformat    56. 25.101 / 56. 25.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 11.102 /  5. 11.102
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  1.100 /  1.  1.100
  libpostproc    53.  3.100 / 53.  3.100
Input #0, flv, from '/Users/hejiancong/Downloads/天臺愛情故事.flv':
  Duration: 00:01:06.87, start: 0.000000, bitrate: 448 kb/s
    Stream #0:0: Video: flv1, yuv420p, 320x240, 15 fps, 15 tbr, 1k tbn, 1k tbc
    Stream #0:1: Audio: mp3, 22050 Hz, mono, s16p, 32 kb/s
[libx264 @ 0x7fd28201e400] using cpu capabilities: MMX2 SSE2Fast SSSE3 SSE4.2 AVX FMA3 AVX2 LZCNT BMI2
[libx264 @ 0x7fd28201e400] profile High, level 2.0
[libx264 @ 0x7fd28201e400] 264 - core 148 r2665 a01e339 - H.264/MPEG-4 AVC codec - Copyleft 2003-2016 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=7 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=15 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=abr mbtree=1 bitrate=640 ratetol=1.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/Users/hejiancong/Downloads/天臺愛情故事.mp4':
  Metadata:
    encoder         : Lavf56.25.101
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuv420p, 320x240, q=-1--1, 640 kb/s, 15 fps, 15360 tbn, 15 tbc
    Metadata:
      encoder         : Lavc56.26.100 libx264
    Stream #0:1: Audio: aac (libvo_aacenc) ([64][0][0][0] / 0x0040), 22050 Hz, mono, s16, 128 kb/s
    Metadata:
      encoder         : Lavc56.26.100 libvo_aacenc
Stream mapping:
  Stream #0:0 -> #0:0 (flv1 (flv) -> h264 (libx264))
  Stream #0:1 -> #0:1 (mp3 (native) -> aac (libvo_aacenc))
Press [q] to stop, [?] for help
frame=  226 fps=0.0 q=17.0 size=    1080kB time=00:00:14.92 bitrate= 592.6kbits/frame=  418 fps=417 q=17.0 size=    2290kB time=00:00:27.74 bitrate= 676.0kbits/frame=  607 fps=404 q=16.0 size=    3422kB time=00:00:40.33 bitrate= 695.2kbits/frame=  800 fps=399 q=16.0 size=    4634kB time=00:00:53.24 bitrate= 713.1kbits/frame=  997 fps=398 q=14.0 size=    5949kB time=00:01:06.33 bitrate= 734.6kbits/frame=  999 fps=380 q=-1.0 Lsize=    6298kB time=00:01:06.89 bitrate= 771.2kbits/s    
video:5222kB audio:1046kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.469799%
[libx264 @ 0x7fd28201e400] frame I:49    Avg QP:11.00  size:  8288
[libx264 @ 0x7fd28201e400] frame P:927   Avg QP:14.59  size:  5232
[libx264 @ 0x7fd28201e400] frame B:23    Avg QP:16.51  size:  3925
[libx264 @ 0x7fd28201e400] consecutive B-frames: 95.5%  4.2%  0.3%  0.0%
[libx264 @ 0x7fd28201e400] mb I  I16..4: 15.3% 78.0%  6.7%
[libx264 @ 0x7fd28201e400] mb P  I16..4:  3.8% 35.4%  2.7%  P16..4: 31.0% 11.0%  6.0%  0.0%  0.0%    skip:10.1%
[libx264 @ 0x7fd28201e400] mb B  I16..4:  0.2%  9.5%  1.8%  B16..8: 37.2% 14.0%  5.6%  direct: 6.9%  skip:24.6%  L0:66.1% L1:15.1% BI:18.8%
[libx264 @ 0x7fd28201e400] final ratefactor: 13.12
[libx264 @ 0x7fd28201e400] 8x8 transform intra:83.8% inter:89.1%
[libx264 @ 0x7fd28201e400] coded y,uvDC,uvAC intra: 85.7% 96.0% 71.2% inter: 48.1% 61.6% 42.9%
[libx264 @ 0x7fd28201e400] i16 v,h,dc,p: 27% 25% 18% 29%
[libx264 @ 0x7fd28201e400] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 25% 24% 29%  4%  3%  3%  3%  5%  5%
[libx264 @ 0x7fd28201e400] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 36% 30% 11%  4%  4%  4%  3%  4%  4%
[libx264 @ 0x7fd28201e400] i8c dc,h,v,p: 52% 20% 20%  8%
[libx264 @ 0x7fd28201e400] Weighted P-Frames: Y:8.4% UV:5.4%
[libx264 @ 0x7fd28201e400] ref P L0: 75.2% 14.5%  7.6%  2.5%  0.3%
[libx264 @ 0x7fd28201e400] ref B L0: 92.3%  7.6%  0.1%
[libx264 @ 0x7fd28201e400] ref B L1: 99.0%  1.0%
[libx264 @ 0x7fd28201e400] kb/s:642.20

最后得到如下結果:


.flv 格式小視頻 轉換 .mp4小視頻 成功

(__)


@end

好了,今天先說這么多,接下來我將帶打進進入如何在 IOS 上集成 FFmpeg 的大坑了
,準備跟著博主的步伐入坑吧!

心如止水,奮力前行

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容