您的位置:首页 > 运维架构 > Linux

linux下ffmpeg的安装

2012-11-21 13:29 351 查看
  1、下载ffmpeg。

    在网上搜索一下,或者到官方网站下载
http://www.ffmpeg.org/releases http://www.ffmpeg.org/download.html

  2、解压

   tar命令解压

tar xvzf ffmpeg-git-c995644
  3、配置

  ./configure --enable-shared --prefix=/usr/local/ffmpeg

  其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。

  4、编译并安装

  make

  make install

  5、安装之后在/usr/local/ffmpeg会看到有三个目录

  lib 动态链接库位置

  include 编程要用到头文件

  bin 执行文件所在的目录

  6、为了以后方便编程,我们把lib中的三个链接库libavcodec.so libavformat.so libavutil.so复制到/usr/lib下。把include目录下的ffmpeg目录复制到/usr/include下。

  执行bin目录下的ffplay,可以去播放音频或者视频文件。例如播放1.mp3

  ./ffplay 1.mp3

  另外,bin目录下还有两个文件:ffmpeg和ffserver

  ffmpeg是一个很好的视频和音频的格式转化工具。网上有很多它的说明文档。如果不想生成ffserver,只要在./configure的时候加--disable-ffserver即可。

./configue 和编译过程中可能需要其他库的支持,例如x264,faac等等,按照提示使用sudo apt-get install libname-dev 一个个的安装即可。

  7、编程

  如果写了一个test.c文件,要包含ffmpeg的头文件,可以这样写:

  #include

  编译:gcc -o test test.c -lavformat -lavcodec -lavtuil (前提是有第6步的操作)

  如果没有第6部的操作,则编译的时候如下:

  gcc -o test test.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec -lavtuil

  编译成功之后,执行的时候还是需要动态库的支持,还是要把那三个动态库文件复制到/usr/lib或者/lib中,不然执行的时候会说找不到动态库链接。还有一个方法可以解决这个问题,就是把/usr/local/ffmpeg/lib这个目录加入到/etc/ld.so.config中,然后执行 ldconfig,或者重启电脑,这样执行的时候系统就可以从/usr/local/ffmpeg/lib这个目录下去找这三个动态库文件了。

  以上的方式是采用动态库编译ffmpeg的,如果在configure的时候不加上--enable-shared的,则采用静态链接的方式,不会生成那三个动态库。同时生成的ffplay、ffmpeg的执行文件也比较的大,因为他们不需要动态库的支持,就可以执行。但是不利于再次开发,所以我采用动态链接的方式。configure中还有很多的选项,可以通过./configure --help查看,也可以直接查看configure文件。这在配置的时候很重要。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

基于linux内核的操作系统中编译:

我所用的操作系统是ubuntu, 将下载ffmpeg的源码放在/home目录下面。或者你也可以用svn从服务器上checkout ffmpeg的代码。ubuntu默认情况下是没有安装svn,但是你可以通过一个非常的简单的命令就完成安装,命令是sudo apt-get subversion。前提是你可以访问因特网。这个过程大约需要几分钟,具体的时间跟你的网络状况有关系。



打开终端,进入ffmpeg目录。依次输入以下命令:

./configure --enable-memalign-hack --disable-debug

注:有时候会提示没有yasm,使用"--disable-yasm",或者从http://www.tortall.net/projects/yasm/releases下载相关的版本,当然你也可以用sudo apt-get install yasm 安装,当然前提是ubuntu里有yasm的package

make



你也可以将2条命令合成一条,一次性执行完成。

./configure --enable-memalign-hack --disable-debug && make



当命令完成之后你就可以在ffmpeg的目录下找到8个可执行程序:

ffmpeg.exe

ffmpeg_g.exe

ffprobe.exe

ffprobe_g.exe

ffplay.exe

ffplay_g.exe

ffserver.exe

ffserver_g.exe

每个可执行程序有一个_g的相对应。这个带调试信息的可执行程序。

这样编译任务完成。

注:默认没有编译ffplay的可执行文件,从Makefile里面可以看出,没有SDL,你可以从http://www.libsdl.org/releases去下载相应的版本去安装,也可以通过

sudo apt-get install libsdl1.2-dev 安装,当然前提也是ubuntu里面有libsdl的package。

似乎很顺利, 接下来我们轻松一下,用我们编译出来的成果来看个电影,敲入如下命令:

./ffplay /media/downdriver/hly.mp4



然而我们被告知:

Could not initialize SDL library: No avaiable video device



这是怎么回事呢? 原来我的系统中没有安装x11的库文件, 因此编译出来的SDL库就没有加载视频设备的能力了。那接下来我们首先下载对应x11的库文件,然后重新编译SDL, 那么有没有必要重新编译ffmpeg呢, 没有必要。



下载库文件:

sudo apt-get install libx11-dev



下载必要的头文件:

sudo apt-get install xorg-dev



安装成功后,再次进入sdl源代码目录重新编译, 不要忘了首先执行:

make clean



接着是:

./configure

make && make install



再来一次:

./ffplay /media/downdriver/hly.mp4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: