ubuntu下ffmpeg编译安装

来源:互联网 发布:机械三维设计软件课程 编辑:程序博客网 时间:2024/04/29 03:31
1、ffmpeg是什么东西?相信很多人第一次接触这个东西,我先在这里做个简单的介绍。


FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了目前领先的音/视频编码库libavcodec等。


libavformat :用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能; 
libavcodec :用于各种类型声音/图像编解码; 
libavutil :包含一些公共的工具函数; 
libswscale :用于视频场景比例缩放、色彩映射转换; 
libpostproc:用于后期效果处理; 
ffmpeg :该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等; 
ffsever :一个 HTTP 多媒体即时广播串流服务器; 
ffplay :是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;


 


2、安装编译ffmpeg


以下是在ffmpeg0.6源码下完成的。


1)、下载ffmpeg。
   在网上搜索一下,或者到官方网站下载


2)、解压
  tar命令解压


3)、配置
    ./configure --enable-shared --prefix=/usr/local/ffmpeg
  其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。
  错误ffmpeg yasm not found, use --disable-yasm for a crippled build处理方法如下:
  yasm是汇编编译器,因为ffmpeg中为了提高效率用到了汇编指令,比如MMX和SSE。解决这个问题方面有两个:
  1、在网上下载一个yasm.exe并安装在mingw/bin下面,编译代码时你注意看,会发现asm后缀的文件用的编译器是yasm,c文件用的是gcc;
  2、不使用汇编指令,在配置时加上,即./configure  --disable-yasm


  yasm下载地址:http://yasm.tortall.net/Download.html
  下载yasm-1.2.0-cygwin.exe
  改名后放到cygwin/bin下


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即可。


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文件。这在配置的时候很重要。