如何在Ubuntu14中编译ffmpeg,并且建立一个eclipse工程

对于一个研究视频处理的人,如果没有用过ffmpeg,那基本意味着会开车但是不知道发动机是啥。不过ffmpeg的编译安装和使用真不是个省心的工作,几乎每进行一步都会出现缺少库了之类的问题,而且有时候某个依赖项你装了,但是装了好几个、位置不对或者版本不对都可能出现问题。

好事多磨吧,现在总结一下如何在64位Ubuntu14.04中安装ffmpeg2.3。

1.安装 

首先是下载ffmpeg2.3源代码,官网、github都有,这里不再赘述。我将我使用的文件都打包在一起,地址在文章末尾。如果想将ffplay一起生成,最好使用ffmpeg2.3以及以上的版本,因为早期的版本虽然可以通过修改配置文件、设置编译参数等方式实现,但是经常在make之后不成功。(其实可以使用apt-get install直接安装的,但是这样不便于自主控制)。

ffmpeg之所以复杂,是因为它其实是一个框架,或者是一个容器,几乎所有的与音频、视频甚至图片的处理算法都可以集成进来,然后就可以按照ffmpeg的基本方法来调用和使用。如果你的算法符合相关的规范,也可以添加进来的。这里我们只添加两个最基本的库,H264的编码库x264和mp3音频的lame。

其实安装方法也有好多种,apt-get install直接安装,或者编译安装源代码文件。这里我们分别使用两种方法进行。安装x264的库:sudo apt-get install  -y libx264-dev。安装lame:在本文提供的代码文件夹中,首先进入lame-3.99.5中执行./configure,然后执行make 完成后执行make install。

完成之后,我们就可以安装ffmpeg了。

首先是configure,使用./configure --help,可以看到能够设置的选项非常多,入门阶段很多直接采用默认就可以。如果要工程化使用了,为了给ffmpeg减肥,开发者会将大量不需要的功能和程序给禁止掉,也即所谓的优化。这里需要强调的同样有两个--enable-shared 和--prefix。因为我们要将ffmpeg编译成共享库,供二次开发调用,所以这里要在编译时设置 --enable-shared选项,否则只生成静态库。--prefix指定的是安装位置,一般用户程序安装在/usr/local/下,所以,我们这里最终的配置命令为:“./configure --enable-shared --prefix=/usr/local/ffmpeg2.3 ”

之后,执行 make 进行编译,为了提高速度,可以使用make -j4,进行多线程编译。完成后执行make install安装。

安装完成后,可以看到/usr/local/lib下生成了一个ffmpeg2.3的文件夹,里面有bin、include和lib等文件。此时执行bin下面的程序是不行的。所以,先配置环境变量。方法为:gedit /etc/profile,在文件的末尾添加

      export PATH=/usr/local/ffmpeg2.3/bin:$PATH

然后关闭文件,执行source /etc/profile命令。

然后执行 ffmpeg命令,不出意外,会提示几个so库找不到,我喜欢的方法是写个脚本,将ffmpeg共享库的链接文件直接复制到/usr/lib下。脚本内容为ffmpeg.sh:

#!/bin/bash
cp /usr/local/ffmpeg2.3/lib/libavcodec.so.55 /usr/lib/x86_64-linux-gnu
cp /usr/local/ffmpeg2.3/lib/libavdevice.so.55 /usr/lib/x86_64-linux-gnu
cp /usr/local/ffmpeg2.3/lib/libavfilter.so.4 /usr/lib/x86_64-linux-gnu
cp /usr/local/ffmpeg2.3/lib/libavformat.so.55 /usr/lib/x86_64-linux-gnu
cp /usr/local/ffmpeg2.3/lib/libavutil.so.52 /usr/lib/x86_64-linux-gnu
cp /usr/local/ffmpeg2.3/lib/libswresample.so.0 /usr/lib/x86_64-linux-gnu
cp /usr/local/ffmpeg2.3/lib/libswscale.so.2 /usr/lib/x86_64-linux-gnu
需要注意的是在最新的Ubuntu系统中,将32位的库放在i386-linux-gnu中,将64位库放在x86_64-linux-gnu中,如果直接放在/usr/lib下,有时会提示找不到库文件(当年哥安装openssl时就遇到这种情况,由于当时不知道,花了很多功夫)。

然后执行 sudo chmod +x ffmpeg.sh。然后执行./ffmpeg.sh
如果正常,显示下面的信息就说明安装成功了:

root@ubuntu:/home/lll/Desktop/pis_workspace/ffmpeg1/Debug# ffmpeg
ffmpeg version 2.6.git Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.1)
  configuration: --disable-shared --enable-gpl --enable-static --enable-libx264 --enable-libmp3lame --enable-pthreads --enable-filter=scale --enable-protocol=udp --enable-protocol=file --enable-protocol=unix --enable-encoder=libx264 --enable-encoder=libmp3lame --enable-bsf=h264_mp4toannexb --enable-decoder=mpeg2video --enable-decoder=h264 --enable-decoder=aac --enable-decoder=ac3 --enable-decoder=mp3 --enable-muxer=mpegts --enable-demuxer=mpegts
  libavutil      54. 28.100 / 54. 28.100
  libavcodec     56. 49.101 / 56. 49.101
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 22.101 /  5. 22.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

Use -h to get full help or, even better, run 'man ffmpeg'

2在eclipse中搭建第一个ffmpeg工程

方法与前一个博客如何将testRTSPClient从live555代码中分离出来,并建议第一个eclipse工程类似。首先在eclipse中新建一个c工程,然后添加ffmpeg的include头文件,如下图所示:

然后添加库,这里要添加的库很多

具体包括:ffmpeg的所有库:avcodec、avdevice、avfilter、avformat、avutil、swresample、swscale还有四个必须的库:pthread、m,x264和mp3lame。其中pthread是Linux系统进程库,m是数学库、x264是H264编码库,mp3lame是mp3的编码库。

需要注意的是,这里的“library search path”一项,一般不用填,但是假如你电脑里已经安装过其他版本的ffmpeg,这里最好指定,否则eclipse自动搜索时会加载其他版本的ffmpeg信息,那会出现莫名其妙的问题。

完成之后,我们新建一个ffmpeg1.c文件。写个函数测试一下,环境能否运行。

其实我们不用自己写代码,也不必网上找,在/usr/local/ffmpeg2.3/share/ffmpeg/examples中就有官方提供的示例程序。我们将decoding_encoding.c中的内容复制到ffmpeg1.c中,然后编译,如果正常则会在debug目录下生成一个可执行文件ffmpeg1。如果不成功,请先自己思考,不行的话可以给我留言。

编译成功后,将我的文件夹里的test.h264文件复制到到debug目录中,然后执行下面的命令:

./ffmpeg1 h264

如果生成成功会有下面的输出:

Encode video file test.h264
[libx264 @ 0x1bc2040] using cpu capabilities: none!
[libx264 @ 0x1bc2040] profile High, level 1.3
Write frame  20 (size= 2026)
Write frame  21 (size=  605)
Write frame  22 (size=  129)
Write frame  23 (size=  588)
Write frame  24 (size=  187)
Write frame  25 (size=  661)
Write frame  26 (size=  764)
Write frame  27 (size=  603)
Write frame  28 (size=  962)
Write frame  29 (size=  563)
Write frame  30 (size= 2234)
Write frame  31 (size= 1291)
Write frame  32 (size=  771)
Write frame  33 (size=  827)
Write frame  34 (size=  562)
Write frame  35 (size=  909)
Write frame  36 (size=  629)
Write frame  37 (size= 1083)
Write frame  38 (size=  625)
Write frame  39 (size=  661)
Write frame  40 (size= 2432)
Write frame  41 (size= 1164)
Write frame  42 (size=  853)
Write frame  43 (size=  793)
Write frame  44 (size=  681)
[libx264 @ 0x1bc2040] frame I:3     Avg QP:25.59  size:  2231
[libx264 @ 0x1bc2040] frame P:12    Avg QP:24.06  size:   859
[libx264 @ 0x1bc2040] frame B:10    Avg QP:27.64  size:   560
[libx264 @ 0x1bc2040] consecutive B-frames: 20.0% 80.0%
[libx264 @ 0x1bc2040] mb I  I16..4: 77.6% 12.3% 10.1%
[libx264 @ 0x1bc2040] mb P  I16..4: 76.6%  0.9%  0.2%  P16..4: 20.5%  0.9%  0.9%  0.0%  0.0%    skip: 0.0%
[libx264 @ 0x1bc2040] mb B  I16..4:  0.0%  0.0%  0.0%  B16..8: 11.1%  0.3%  0.0%  direct:10.7%  skip:77.9%  L0:20.3% L1:49.6% BI:30.1%
[libx264 @ 0x1bc2040] final ratefactor: 15.85
[libx264 @ 0x1bc2040] 8x8 transform intra:3.8% inter:51.5%
[libx264 @ 0x1bc2040] direct mvs  spatial:0.0% temporal:100.0%
[libx264 @ 0x1bc2040] coded y,uvDC,uvAC intra: 5.0% 33.6% 4.7% inter: 1.8% 36.4% 9.1%
[libx264 @ 0x1bc2040] i16 v,h,dc,p:  0%  0%  0% 100%
[libx264 @ 0x1bc2040] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu:  3% 29% 16% 51%  0%  0%  0%  0%  0%
[libx264 @ 0x1bc2040] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 11%  6% 14% 51%  1%  5%  3%  7%  2%
[libx264 @ 0x1bc2040] i8c dc,h,v,p:  2%  6%  4% 88%
[libx264 @ 0x1bc2040] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x1bc2040] ref P L0: 96.4%  0.9%  2.5%  0.1%  0.0%
[libx264 @ 0x1bc2040] ref B L0: 63.7% 27.6%  8.8%
[libx264 @ 0x1bc2040] kb/s:180.82
好了,接下来就尽情地遨游ffmpeg吧。
代码下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纵横千里,捭阖四方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值