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 的大坑了
,准备跟着博主的步伐入坑吧!

心如止水,奋力前行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容