本文标签(Tag)

ffmpeg 配置 编译

1 ffmpeg介绍
   ffmpeg是音视频的分离,转换,编码解码及流媒体的完全解决方案,其中最重要的就是libavcodec库。它被mplayer或者xine使用作为×××。还有,国内比较流行的播放器影音风暴或MyMPC的后端ffdshow也是使用ffmpeg的解码库的。
 
    ffmpeg软件包经编译过后将生成三个可执行文件,ffmpeg,ffserver,ffplay。其中ffmpeg用于对媒体文件进行处理,ffserver是一个http的流媒体服务器,ffplay是一个基于SDL的简单播放器。
 
    ffmpeg 中有五个库文件,libavcodec,libavformat,libavutil,libswscale,libpostproc,其中库 libavcodec,libavformat用于对媒体文件进行处理,如格式的转换;libavutil是一个通用的小型函数库,该库中实现了CRC校验码的产生,128位整数数学,最大公约数,整数开方,整数取对数,内存分配,大端小端格式的转换等功能;libswscale,libpostproc 暂时不知道何用。
 
2 ffmpeg下载
    最新的ffmpeg可以通过svn下载,SVN辅助的软件有:
    SubVersion,从 http://subversion.tigris.org/ 下载,支持linux。
    TortoiseSVN,从 http://tortoisesvn.tigris.org/ 下载,是很不错的SVN客户端程序,为windows外壳程序集成到windows资源管理器和文件管理系统的Subversion客户端,用起来很方便。
 
    subversion安装,记住最好之前装过apr和apr-util,在apache.org网站能下到
    wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
    tar zvxf subversion-1.3.2.tar.gz
    cd subversion-1.3.2
    ./configure --with-apr=/usr/local/apr-httpd --with-apr-util=/usr/local/apr-util-httpd/
    make
    make install
    如果安装了FC6,它已经带了svn,不用装了。
 
    ffmpeg的下载:我们就可以通过svn命令获取最新的ffmpeg,命令如下:
    svn checkout svn://svn.mplayerhq.hu/ffmpeg/trunk ffmpeg
 
3 ffmpeg支持库的安装
* xvid
    xvid的获取地址如下: http://www.xvid.org/
    wget http://downloads.xvid.org/downloads/xvidcore-1.1.3.tar.gz
    配置编译
    for x86
 #./configure --prefix=/usr/local
 #make
 #make install
    for arm
 #CC=arm-linux-gcc ./configure --prefix=/usr/local/arm/arm-linux --build=i686-pc-linux --host=arm-linux --target=arm-linux
 #make
 #make install
 
* x264
    x264的获取地址如下: svn co svn://svn.videolan.org/x264/trunk x264
    配置编译
    for x86
 #./configure --enable-shared --prefix=/usr/local
 #make
 #make install
    for arm
 #CC=arm-linux-gcc ./configure --enable-pthread --enable-shared --host=arm-linux --prefix=/usr/local/arm/arm-linux
 #make
 #make install
 
* 支持mp3
    lame的获取地址如下: http://lame.sourceforge.net/index.php
    配置编译
    for x86
 ./configure --enable-shared --prefix=/usr/local
 
* 支持Ogg Vorbis:
 
* AC3和dts编码的支持
    libdts编译参数
./configure --prefix=/usr
make
make install
 
* mpg4 aac格式支持,
    如果ffserver服务器还针对手机用户服务,所以,类似aac,mpg4铃声格式的支持,我们也得做。这里我们安装faad2和faac就行,下载请到http://www.audiocoding.com/modules/mydownloads/,http://prdownloads.sourceforge.net/faac
    FAAD2的编译
cd faad2
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
    faac的编译
cd faac
chmod +x bootstrap
./bootstrap
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
    在编译ffmpeg,在configure时加上--enable-amr_nb --enable-faad --enable-faac参数。
 
* 支持3gp格式,
    这也是现在好多手机支持的格式,所以也得支持编译, 编译的时候加上--enable-amr_nb --enable-amr_wb参数就行,根据编译系统的提示,所以我们得下载一些编译3gp所需得文件。
源码网址:http://www.3gpp.org/ftp/Specs
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
解压以后把里面的文件都拷贝到libavcodec/amrwb_float
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr_float
 
* ffmpeg支持VC1格式
    微软ASF格式的三个版本,WMV1,WMV2,WMV3分别对应MediaPlayer的版本7,8和9,所以很多时候会称VC1为WMV3或WMV9,都是它了,有时候在代码里,也能看到称呼它为VC9的。因为微软还没有正式公开这种格式,所以当前对VC1的支持还很不完善。本文基本是根据 Multimedia Mike 的一篇博客翻译和完善而来。
    (1) 首先要下载 SMPTE VC-1 reference decoder,这个组织是要收费的,可以从这里下载免费的。
    (2) 在ffmpeg目录下的libavcodec目录下面,建立目录libvc1。
    (3) 将VC1_reference_decoder_release6/decoder/目录中的*.c和*.h文件全部copy到libvc1目录下。
    (4) 将VC1_reference_decoder_release6/shared/目录中的*.c和*.h文件全部copy到libvc1目录下。
    (5) 将 libvc1-makefile.txt放到libvc1下的Makefile文件。
    (6) 将smpte-vc1.c文件放到libavcodec目录下。
    (7) 修改libavcodec目录下的vc9.c,将文件最后的wmv3_decoder这个AVCodec的structure,用#if 0和#endif包含起来,也就是使它失效了。
    (8) 修改libavcodec目录下的allcodecs.c,将register_avcodec(&wmv3_decoder)上下的注释去掉,使它发挥作用。
    (9) 修改libavcodec目录下的Makefile,把OBJS的列表中加入smpte-vc1.o。
    (10)修改ffmpeg主目录下的Makefile文件,把-L./libavcodec/libvc1 -lvc1$(BUILDSUF)加入到FFLIBS后面。
    (11) 进入ffmpeg/libavcodec/libav1,执行make
    (12) 到ffmpeg主目录下,执行config;make;make install。config时根据实际情况带参数。
 
* 采用ffmpeg转码制作FLV文件的方法
    采用ffmpeg转码制作FLV文件,和转码成其它媒体类型的重要差别是一定要有lame库支持,因为FLV的声音编码采用mp3格式,非lame这个东东不行。编译ffmpeg中加入lame库真是一场灾难,特别在windows下,很多参数都不能发挥作用,最后直接手工copy和改一些文件,记录如下:
    (1) 如果在Windows下编译,第一步当然是下载MinGW和MSYS来装上了。到http://mingw.sourceforge.net/去下载最新版的MinGW-5.0.2.exe和MSYS-1.0.11-2004.04.30-1.exe。
    (2) 先安装MinGW,直接运行MinGW-5.0.2.exe安装,选择目录,譬如选择D:\MinGW为安装目录。安装时需要选择gcc和make模块,安装文件本身很小,会从网上下载模块来安装。
    (3) 然后安装MSYS,也是直接运行MSYS-1.0.11-2004.04.30-1.exe安装。安装目录一般选择D:\MinGW\bin \1.0。,安装过程会询问刚才安装MinGW的目录,输入D:\MinGW,其它都回答'Y'就搞定了。如果不清楚,可以看这个图片效果。
    (4) 运行MSYS,桌面上有个图标,双击就运行了,运行结果是一个模拟unix的命令窗口,后面的编译都在这种状态下进行。前面4步在linux不需要。
    (5) 到http://lame.sourceforge.net/去下载最新版的lame-3.97b2.tar.gz,copy到你认为合适的地方,解压后进入lame解压出来的目录中。执行
        ./configure --prefix=PREFIX
        make
        make install
    (6) 就把编译出来的include下的lame目录copy到/usr/include目录下,把lib下的几个库文件都copy到/usr/lib目录下。这里注意有个变化,如果只copy lib目录下的静态库到/usr/lib下,就是只copy libmp3lame.a文件,编译出来的ffmpeg最终就不会对libmp3lame的动态库有依赖关系,这是因为编译首先找动态库,动态库没有才找静态库。如果不做这个copy,后面编译ffmpeg时无论如何指定参数,都会报错LAME not found,不知道是哪里的bug。
    (7) 从http://ffmpeg.mplayerhq.hu/取得最新的ffmpeg,现在自由软件都大量采用SVN了,要先装一个SVN,可以去http://tortoisesvn.tigris.org/下载windows版的SVN,去http://subversion.tigris.org/下载linux版的SVN。SVN如何编译安装这里就省略了。
    (8) 如果在windows下,打开解压后的ffmpeg目录下的Makefile文件,在FFLIBS的那一行后面加上-lmp3lame$(BUILDSUF)。这个也不知道是哪个bug引起的,搞了好长时间才搞出来,郁闷。Linux下不用这样。
 
4 ffmpeg的编译
 
    配置编译
    for x86
#./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-faadbin --enable-dts --enable-pp --enable-faad --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
make
make install
 
补充1:
关于3gp的编译,如果大家要编译--enable-amr_nb-fixed,那就不能跟--enable-amr_nb同时编译,我不大清楚这两者到底有什么区别,似乎fixed是修正版,管他呢,编译的方法:
wget http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip
解压以后把里面的文件都拷贝到libavcodec/amr目录下
 
修改libavcodec/amr/makefile 找到CFLAGS = -Wall -pedantic-errors -I. $(CFLAGS_$(MODE)) -D$(VAD) 换成CFLAGS = -Wall -I.
 
$(CFLAGS_$(MODE)) -D$(VAD) -DMMS_IO
 
整体编译参数就是
#./configure --prefix=/usr --enable-gpl --enable-shared --enable-mp3lame --enable-amr_nb-fixed --enable-amr_wb --enable-amr_if2 --enable-libogg --enable-vorbis --enable-xvid --enable-a52 --enable-a52bin --enable-dts --enable-pp --enable-faad --enable-faadbin --enable-faac --enable-x264 --enable-pthreads --disable-ffserver --disable-ffplay
make
make install
 
 for x86的简易配置
#./configure --prefix=./install --disable-shared --enable-pthreads --enable-libx264 --enable-libxvid --arch=i686 --enable-gpl
#make
#make install
 
    for arm
    配置编译
#./configure --prefix=/home/zht/redhatzht/sources/image-colletct/ffmpeg/install --enable-static --disable-shared --enable-libx264 --enable-libxvid --cross-compile --cc=arm-linux-gcc --arch=arm --enable-gpl --disable-strip --disable-network --disable-ipv6 --disable-vhook --disable-audio-beos --disable-audio-oss --disable-mpegaudio-hp  --enable-pthreads --enable-small --disable-parsers --disable-debug
#make
#make install
 
注意:
 
(1)“/home/zht/redhatzht/sources/image-colletct/ffmpeg”为ffmpeg源码所在目录。
(2)“/usr/local/arm”为arm-linux-gcc交叉编译器所在目录。
(3) 如果库文件安装在/usr/local/lib目录中导致配置失败,可以在/etc/ld.so.conf文件中添加/usr/local/lib目录,然后执行#ldconfig。
    x86上的ldconfig不能在arm上运行,arm上的ldconfig工具是在建立交叉编译器时,编译glibc是产生的,可以拷贝到arm-linux中。
(4) 本文大部分内容来自网络,其中xvid,x264的库,我亲手安装过,ffmpeg的配置编译for x86的简易配置,for arm,我亲手配置编译过,并在x86,arm上可用,编译配置都是采用静态库。

转载于:https://blog.51cto.com/prothesman/1411477

ffmpeg 配置与编译相关推荐

  1. Linux ffmpeg的安装编译过程

    Linux ffmpeg的安装编译过程 1.下载ffmpeg.     在网上搜索一下,或者到官方网站下载 2.解压    tar命令解压 3.配置 ./configure --enable-shar ...

  2. ffmpeg 纯静态编译,以及添加自定义库流程摘要

    需求: 1. 纯静态编译ffmpeg ,即ldd ./ffmpeg 的结果是:not a dynamic executable 2.  修改ffmpeg 项目,添加自定义功能库 3. 自定义库由c++ ...

  3. FFmpeg安卓平台编译

    准备的文件 1.FFmpeg源代码 2.ubuntu系统或者windows下搭建cygwin交叉编译环境 3.ndk-linux或者ndk-windows版本 开始 1.解压FFmpeg,ndk 2. ...

  4. windows中 FFmpeg 配置libx264 遇到的坑和解决办法

    需要mnys系统+MinGW,默认大家都安装好啦 安装libx264: git clone https://code.videolan.org/videolan/x264.git 用mnys命令行安装 ...

  5. 【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】一、FFmpeg so库编译

    转自:https://juejin.im/post/5e130df55188253a8b42ebac 目录 一.Android音视频硬解码篇: 1,音视频基础知识 2,音视频硬解码流程:封装基础解码框 ...

  6. FFmpeg学习之八(FFmpeg源码编译)

    FFmpeg学习之八(FFmpeg源码编译) Mac下 FFmpeg源码编译 安装 1. 使用终端安装FFmpeg 2. 手动编译 2.1 编译环境 - Xcode 2.2 安装依赖库 2.3 安装F ...

  7. FFmpeg下载、编译、安装

    1.FFmpeg 下载.编译.安装 1.1.下载 新建个目录下载 FFMpeg 源码 下载命令:git clone https://git.ffmpeg.org/ffmpeg.git libavfor ...

  8. 编java用jdk还是editplus_怎样运用EditPlus进行配置Java编译环境

    不知道大家是否知道其实学习java主要有三种开发工具,分别是文本编辑软件.EcliPSe以及JBuilder.那么他们三者之间又有什么区别呢?小编就这三者发表一下个人的意见吧.对于学习Java的初学者 ...

  9. Cocos2d-x项目开发时在Eclipse中配置环境编译C++

    最近在做cocos2d-x的项目开发,当然前期肯定是环境的配置工作,为了能方便的在Eclipse中编辑和编译C++部分的代码,则需要配置Eclipse的环境,之前几次犯了一些错误,导致每次打开C++的 ...

最新文章

  1. VMware中无法识别usb
  2. cmake 生成vc 项目文件
  3. 技术人的七夕表白可以有多浪漫?
  4. Linux清除cache的几种方式
  5. 在远程系统上开发 SharePoint 应用程序
  6. 深入理解 Android 消息机制原理
  7. python 随机颜色
  8. Excel批量打开URL
  9. 【001】快乐数字解题过程记录
  10. 腾讯云离线语音识别sdk
  11. 华为电脑 鸿蒙,微软宣布Win10装机量突破10亿,唯独华为电脑不能安装,鸿蒙极速反击...
  12. 谷歌浏览器自定义标签页 newtab
  13. 《啊哈!算法》第一章 - 第三节 - 快速排序(Java实现)
  14. python实现画小猪佩奇
  15. k阶子式、主子式、顺序主子式、余子式、代数余子式
  16. Oracle导入.DMP文件命令
  17. 格里高利历java_Java 日历笔记
  18. 印度和印度尼西亚有什么关系吗?
  19. docker(6)容器的三剑客:docker machine、docker-compose、docker Swarm
  20. Java这十年 - 与Java相关的四十个名字 (2)

热门文章

  1. QQ for Linux下载、安装、运行、卸载
  2. 用函数式编程,从0开发3D引擎和编辑器(三):初步需求分析
  3. linux下更换pip源
  4. 2017年个人年终总结
  5. 23 Python 面向对象
  6. 2013年06月电脑公司GHOSTXPSP3装机版◆年中推荐◆
  7. [ZZ]强签名的由来和作用
  8. C/C+语言struct深层探索
  9. sqli-labs过关笔记(Page-1:1-22关)
  10. java动态网站框架_大型网站动态应用系统架构