美文网首页iOS视频开发iOS 直播视频Realank的iOS专题
iOS 利用FFmpeg 开发音视频流(一)——Mac 系统上编

iOS 利用FFmpeg 开发音视频流(一)——Mac 系统上编

作者: Abson在简书 | 来源:发表于2016-03-24 18:03 被阅读5260次

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

    心如止水,奋力前行

    相关文章

      网友评论

      • Link913:博主你好,ffmpeg的选择库如何精简呢?我基本上只用H.264和AAC的,该怎么设置参数呢
        Liusr:@SkyHarute 你会精简了吗
        Abson在简书:@SkyHarute ffmpeg中不存在h264和aac编码器,要自己将编码器合并到ffmpeg中并编译出可用版本
      • c7d69b3fd2fb:我终端显示转换成功了;
      • c7d69b3fd2fb:我转换成功了,但是转换后的mp4文件到哪去了,找不到啊
        小羊孩子:在当前目录下
      • 凯文Kevin21:楼主把.flv视频分享一份给我把,找了好久没下载成功。。
        凯文Kevin21:@葱神大大 正在看。。还没看到哪儿来,,, :joy:
        Abson在简书:@七秒小鱼人 到我个人博客网站的文章 <<利用FFmpeg 开发音视频流(三)——将视频 YUV 格式编码成 H264>> 中,文章最后有一整个工程地址,可以下载,里面存在你想要的东西呀。
      • 8bad0e5aeda6:把你的mp4文件给我分享一分吧,网盘
      • Joe_lisa:最后一步没有成功,一直显示没有找到 xxx No such file or directory ffmpeg -i 天台爱情故事.flv -b:v 640k 天台爱情故事.mp4 其中640k 是大小吗
        Abson在简书:@Joe_lisa 额。。。你本地没有这个文件当然不行啦。
      • koreadragon:安装homebrew用以下链接,文中的好像有点问题:ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
        西西西瓜sama:@koreadragon 没问题 只不过天朝一定几率被墙 多试几次
      • puppySweet:快更新!顶楼主 项目里怎么实现视频处理!不是安装yasm1.2.0么
        Abson在简书:yasm是编译成库用到的喔,正在写第二篇了,等等哈。

      本文标题:iOS 利用FFmpeg 开发音视频流(一)——Mac 系统上编

      本文链接:https://www.haomeiwen.com/subject/bmurlttx.html