交叉编译 ffmpeg x264

转载地址:http://blog.csdn.net/laotie1015/article/details/8290249

 

arm linux 平台
1、 交叉编译x264
我用的是:x264-snapshot-20121212-2245-stable.tar.bz

开始是使用这个命令
./configure --enable-pthread --enable-static --disable-shared --host=arm-linux --disable-asm

然后make
make CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-gcc RANLIB=arm-linux-ranlib STRIP=arm-linux-strip
报出错误:

x264.c:50:34: error: libavformat/avformat.h: No such file or directory
x264.c:51:30: error: libavutil/pixfmt.h: No such file or directory
x264.c:52:31: error: libavutil/pixdesc.h: No such file or directory
x264.c:57:32: error: libswscale/swscale.h: No such file or directory
x264.c: In function 'print_version_info':
x264.c:236: error: 'LIBSWSCALE_VERSION_MAJOR' undeclared (first use in this function)
x264.c:236: error: (Each undeclared identifier is reported only once
x264.c:236: error: for each function it appears in.)
x264.c:236: error: 'LIBSWSCALE_VERSION_MINOR' undeclared (first use in this function)
x264.c:236: error: 'LIBSWSCALE_VERSION_MICRO' undeclared (first use in this function)
x264.c:239: error: 'LIBAVFORMAT_VERSION_MAJOR' undeclared (first use in this function)
x264.c:239: error: 'LIBAVFORMAT_VERSION_MINOR' undeclared (first use in this function)
x264.c:239: error: 'LIBAVFORMAT_VERSION_MICRO' undeclared (first use in this function)
x264.c:260: warning: implicit declaration of function 'swscale_license'
x264.c:260: warning: initialization makes pointer from integer without a cast
x264.c: In function 'print_csp_names':
x264.c:351: error: variable 'i' has initializer but incomplete type
x264.c:351: error: 'PIX_FMT_NONE' undeclared (first use in this function)
x264.c:351: error: storage size of 'i' isn't known
x264.c:351: error: 'enum PixelFormat' declared in 'for' loop initial declaration
x264.c:351: error: 'PIX_FMT_NB' undeclared (first use in this function)
x264.c:353: warning: implicit declaration of function 'av_get_pix_fmt_name'
x264.c:353: warning: initialization makes pointer from integer without a cast
x264.c:351: warning: unused variable 'i'
make: *** [x264.o] 错误 1


这几个文件都是在ffmpeg文件夹中,

解决办法:

先按后面的方法配置一下ffmpeg,原因是libavutil/avconfig.h是生成的,配置过还没有就编译一下,没有那个文件编译的时候会报出找不到这个文件,

然后修改config.mak文件的第十行,加上 -I/home/liuyan/h.264/for_X86/ffmpeg-1.0 就可以找到了

再次运行make命令后,编译通过,但链接时出错。编译libx264.a库时,显示的命令为:

arm-linux-arlibx264.a ....

make文件将链接命令和库名字间没有空格,导致系统无法识别此命令。我尝试修改Makefile文件也不行,干脆手动执行下面的命令:

arm-linux-ar rc libx264.a common/mc.o common/predict.o common/pixel.o common/macroblock.o common/frame.o common/dct.o common/cpu.o common/cabac.o common/common.o common/osdep.o common/rectangle.o common/set.o common/quant.o common/deblock.o common/vlc.o common/mvpred.o common/bitstream.o encoder/analyse.o encoder/me.o encoder/ratecontrol.o encoder/set.o encoder/macroblock.o encoder/cabac.o encoder/cavlc.o encoder/encoder.o encoder/lookahead.o common/threadpool.o

arm-linux-ranlib libx264.a (用于产生x264-config.h文件)

由于我电脑上的交叉编译器是从以下目录去查找头文件和库的,所以把x264.h和libx264.a拷贝到相应目录:(我是通过在/opt/EmbedSky/4.3.3下查找pthread.h和libpthread.a来获取这个目录的)
cp x264.h x264-config.h /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/usr/include/
cp libx264.a /opt/EmbedSky/4.3.3/arm-none-linux-gnueabi/libc/armv4t/usr/lib/

2、 编译ffmpeg
我用的是:ffmpeg-1.0.tar.gz
./configure --enable-cross-compile --arch=arm --target-os=linux --enable-static --disable-shared --cc=arm-linux-gcc --enable-libx264 --enable-gpl --disable-network --enable-pthreads --enable-small --disable-parsers --disable-debug

修改config.mak 中:

CC=arm-linux-gcc

AR=arm-linux-ar

LD=arm-linux-gcc

RANLIB=arm-linux-ranlib

STRIP=arm-linux-strip


make CC=arm-linux-gcc AR=arm-linux-ar LD=arm-linux-gcc RANLIB=arm-linux-ranlib STRIP=arm-linux-strip

 

 

下面是转载别人在PC机上安装ffmpeg和x264的文档

地址:http://www.xxlinux.com/linux/article/accidence/internet/20081226/14739.html

ffmpeg是一款多媒体视频和音频文件解码和编码的工具,用来提供众多的多媒体(主要指视频和音频)文件的播放和转换支持。x264是一个编解码H264视频格式的库文件,相比较xvid或者其它流行的编解码器转换效率和转换后的画面质量都更加优异。Avidemux, VLC Player, MEncoder, 和Handbrake中都可利用x264库文件。

    尽管ffmpeg和x264存在于Ubuntu的软件仓库中,但是实际上通过Uuntu软件仓库apt-get方式安装的ffmpeg是不完整的的版本,仍需要我们通过自行编译才能提供对更多视频、音频格式(例如3gp)转换支持。

   获取相应的依赖软件

    1. 首先请确认在软件源中已经添加了相应的Universe和Multiverse软件源,目的是我们要通过软件仓库来解决x264和ffmpeg的依赖文件。

    2. 接下来如果您之前安装了x264,libx264-dev和ffmpeg请先把它卸载,打开X终端或控制台运行下面的命令:

 

 

sudo apt-get purge ffmpeg x264 libx264-dev

    下面的步骤我们会安装依赖软件及其它编译所需要的软件

    对于Ubuntu的版本:Intrepid Ibex 8.10

    命令:

  

 

sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev

    对于Ubuntu的版本:Hardy Heron 8.04:

    命令:

 

sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall texi2html libfaad-dev libfaac-dev liblame-dev libtheora-dev

    Intrepid Ibex 8.10 和 Hardy Heron 8.04都用到的依赖包:

    libsdl1.2-dev: 运行 ffplay需要

    libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore4-dev libschroedinger-dev libspeex-dev libgsm1-dev: ffmpeg开发应用到的一些文件,其中一些已经在ffmpeg的源码中包含,如果系统中包含且版本太低,可能会导致安装失败(不常见)。

    3. 使用Ubuntu版本为Hardy Heron 8.04请注意下。请最好先安装yasm(一个汇编编译软器,和gcc类似)。它可以优化x264的代码。当然即便没有yasm,也可以在编译过程中加入–disable-asm参数来编译,不过这样得到的x264运行效率会稍差一些。

    好像在Ubuntu Hardy Heron 8.04软件仓库中的Yasm的版本是0.5.0,而最新版本的x264的汇编编译部分需要yasm的版本至少为0.6.1,否则在执行编译命令时会提示:Minimum version is yasm-0.6.1。这时我们可以通过执行:

    命令:

  

 

cd ~/
wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.2.tar.gz
tar xzvf yasm-0.7.2.tar.gz
cd yasm-0.7.2
./configure
make
sudo checkinstall

    来自行下载并编译相应的软件安装x264

    4. 获取最新版本的x264并编译安装,我们在这里通过git命令获取:

 

cd ~/
git clone git://git.videolan.org/x264.git

    开始编译并安装

  

 

cd x264
./configure --enable-shared
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1"
sudo ldconfig

    更多编译参数请执行./configure –help查看。。。

   安装ffmpeg

    5. 通过svn命令获取最新版本的ffmpeg:

 

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

    开始编译并安装:

 

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3"

    更多编译参数请执行./configure –help查看。。。,例如美丽星点用到的参数是(命令中加–prefix=/usr参数目的是规定安装位置,如非必要,请不要加这个参数,以免造成不必要的麻烦):
    ./configure –prefix=/usr –enable-shared –enable-gpl –enable-postproc –enable-swscale –enable-pthreads –enable-nonfree –enable-libdc1394 –enable-libfaac –enable-libfaad –enable-libfaadbin –enable-libgsm –enable-libmp3lame –enable-libnut –enable-libtheora –enable-libvorbis –enable-libx264 –enable-libxvid –enable-avfilter –enable-avfilter-lavf –enable-libamr-nb –enable-libamr-wb
    注意:–enable-libamr-nb –enable-libamr-wb –enable-libfaac这三个参数如果想让ffmpeg可以转换3gp,请在编译过程中加上,其它参数请根据需要添加。

    6. 锁定x264和ffmpeg这两个软件包阻止其升级。这部分也很重要,由于我们自行编译的软件包可能会在操作操作系统更新时被替换掉。

    如果您习惯使用的是图形界面的apt-get命令或者是新利得软件包管理器,请在管理器的界面执行:
    System(系统) -> Administration (系统管理)-> Synaptic Package Manager(新得利软件包管理器) -> 在包浏览器中选择安装好的264-> Package(软件包) -> Lock Version(锁定版本)

    使用aptitude命令的话,请通过下面的命令来锁定版本:
    sudo aptitude hold x264 ffmpeg
    Using ffmpeg and x264使用ffmpeg和x264

    使用ffmpeg最简便的转换视频和音频的方法是用它的预设文件(ffmpeg presets),这些文件在ffmpeg的源代码中就有。我们需要把它复制到当前用户目录的.ffmpeg文件夹中:
    命令:
    新建文件夹

 

mkdir ~/.ffmpeg

    复制预设文件到上面的目录中

  

 

cp ~/ffmpeg/ffpresets/* ~/.ffmpeg

    现在就可以使用预设文件了(libx264-default.ffpreset,libx264-hq.ffpreset,libx264-normal.ffpreset,libx264-fastfirstpass.ffpreset,libx264-max.ffpreset),下面的两个例子会指导你如何使用这些预设:

    命令:

 

ffmpeg -i infile -vcodec libx264 -vpre hq -b 1M -bt 1M -threads 0 outfile.mp4

    改变-vpre 后面的参数即可更改不同的预设,很容易理解这几个参数的意思

    备注(点击查看对应文件):

 

» default - 默认参数(x264 CLI default values)
» fastfirstpass - 快速转换(disables options unnecessary for first pass)
» normal - 正常(Dark Shikari’s Q55 preset)
» hq - 高质量转换(Dark Shikari’s Q75 preset)
» max - 最大文件(all options maxed out)

    您确实可以不使用预设文件,不过那样的话你转换视频或音频文件时要照顾到很多细节,代码会很长,使用预设文件省去了我们很多麻烦!升级ffmpeg和x264

    理所当然我们即使我们锁定了版本,我们还是会想到升级我们的ffmpeg和x264到最新的版本,我们可以使用下面的命令(假定您没有删除相应的svn和git同步文件):

 

 

sudo apt-get purge ffmpeg x264
cd ~/x264
make distclean
git pull
./configure
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1"
cd ~/ffmpeg
make distclean
svn update
./configure --enable-gpl --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3"

   卸载ffmpeg和x264

    Ubuntu发行版Intrepid Ibex 8.10的操作:
    命令:
    sudo apt-get purge x264 ffmpeg build-essential yasm subversion git-core checkinstall texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev
    Ubuntu发行版Hardy Heron 8.04:
    命令:

  

 

sudo apt-get purge x264 ffmpeg build-essential yasm subversion git-core checkinstall texi2html libfaad-dev libfaac-dev liblame-dev libtheora-dev

    引用和相关网站:
    本文英文原文: HOWTO: Compile the latest ffmpeg and x264 from source
    ffmpeg主页
    FFmpeg libx264 presets预设文件下载:ffpresets.zip (20)
    ffmpeg源代码configure帮助文件中文译文(编译说明)
    FFmpeg x264 encoding guide(FFmpeg x264编码指南英文版)

 

 

 


下面是转载别人在PC机上安装ffmpeg和x264的文档

地址:http://www.xxlinux.com/linux/article/accidence/internet/20081226/14739.html

ffmpeg是一款多媒体视频和音频文件解码和编码的工具,用来提供众多的多媒体(主要指视频和音频)文件的播放和转换支持。x264是一个编解码H264视频格式的库文件,相比较xvid或者其它流行的编解码器转换效率和转换后的画面质量都更加优异。Avidemux, VLC Player, MEncoder, 和Handbrake中都可利用x264库文件。

    尽管ffmpeg和x264存在于Ubuntu的软件仓库中,但是实际上通过Uuntu软件仓库apt-get方式安装的ffmpeg是不完整的的版本,仍需要我们通过自行编译才能提供对更多视频、音频格式(例如3gp)转换支持。

   获取相应的依赖软件

    1. 首先请确认在软件源中已经添加了相应的Universe和Multiverse软件源,目的是我们要通过软件仓库来解决x264和ffmpeg的依赖文件。

    2. 接下来如果您之前安装了x264,libx264-dev和ffmpeg请先把它卸载,打开X终端或控制台运行下面的命令:

 

 

sudo apt-get purge ffmpeg x264 libx264-dev

    下面的步骤我们会安装依赖软件及其它编译所需要的软件

    对于Ubuntu的版本:Intrepid Ibex 8.10

    命令:

  

 

sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev

    对于Ubuntu的版本:Hardy Heron 8.04:

    命令:

 

sudo apt-get update
sudo apt-get install build-essential subversion git-core checkinstall texi2html libfaad-dev libfaac-dev liblame-dev libtheora-dev

    Intrepid Ibex 8.10 和 Hardy Heron 8.04都用到的依赖包:

    libsdl1.2-dev: 运行 ffplay需要

    libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev libvorbis-dev libxvidcore4-dev libschroedinger-dev libspeex-dev libgsm1-dev: ffmpeg开发应用到的一些文件,其中一些已经在ffmpeg的源码中包含,如果系统中包含且版本太低,可能会导致安装失败(不常见)。

    3. 使用Ubuntu版本为Hardy Heron 8.04请注意下。请最好先安装yasm(一个汇编编译软器,和gcc类似)。它可以优化x264的代码。当然即便没有yasm,也可以在编译过程中加入–disable-asm参数来编译,不过这样得到的x264运行效率会稍差一些。

    好像在Ubuntu Hardy Heron 8.04软件仓库中的Yasm的版本是0.5.0,而最新版本的x264的汇编编译部分需要yasm的版本至少为0.6.1,否则在执行编译命令时会提示:Minimum version is yasm-0.6.1。这时我们可以通过执行:

    命令:

  

 

cd ~/
wget http://www.tortall.net/projects/yasm/releases/yasm-0.7.2.tar.gz
tar xzvf yasm-0.7.2.tar.gz
cd yasm-0.7.2
./configure
make
sudo checkinstall

    来自行下载并编译相应的软件安装x264

    4. 获取最新版本的x264并编译安装,我们在这里通过git命令获取:

 

cd ~/
git clone git://git.videolan.org/x264.git

    开始编译并安装

  

 

cd x264
./configure --enable-shared
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1"
sudo ldconfig

    更多编译参数请执行./configure –help查看。。。

   安装ffmpeg

    5. 通过svn命令获取最新版本的ffmpeg:

 

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg

    开始编译并安装:

 

svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3"

    更多编译参数请执行./configure –help查看。。。,例如美丽星点用到的参数是(命令中加–prefix=/usr参数目的是规定安装位置,如非必要,请不要加这个参数,以免造成不必要的麻烦):
    ./configure –prefix=/usr –enable-shared –enable-gpl –enable-postproc –enable-swscale –enable-pthreads –enable-nonfree –enable-libdc1394 –enable-libfaac –enable-libfaad –enable-libfaadbin –enable-libgsm –enable-libmp3lame –enable-libnut –enable-libtheora –enable-libvorbis –enable-libx264 –enable-libxvid –enable-avfilter –enable-avfilter-lavf –enable-libamr-nb –enable-libamr-wb
    注意:–enable-libamr-nb –enable-libamr-wb –enable-libfaac这三个参数如果想让ffmpeg可以转换3gp,请在编译过程中加上,其它参数请根据需要添加。

    6. 锁定x264和ffmpeg这两个软件包阻止其升级。这部分也很重要,由于我们自行编译的软件包可能会在操作操作系统更新时被替换掉。

    如果您习惯使用的是图形界面的apt-get命令或者是新利得软件包管理器,请在管理器的界面执行:
    System(系统) -> Administration (系统管理)-> Synaptic Package Manager(新得利软件包管理器) -> 在包浏览器中选择安装好的264-> Package(软件包) -> Lock Version(锁定版本)

    使用aptitude命令的话,请通过下面的命令来锁定版本:
    sudo aptitude hold x264 ffmpeg
    Using ffmpeg and x264使用ffmpeg和x264

    使用ffmpeg最简便的转换视频和音频的方法是用它的预设文件(ffmpeg presets),这些文件在ffmpeg的源代码中就有。我们需要把它复制到当前用户目录的.ffmpeg文件夹中:
    命令:
    新建文件夹

 

mkdir ~/.ffmpeg

    复制预设文件到上面的目录中

  

 

cp ~/ffmpeg/ffpresets/* ~/.ffmpeg

    现在就可以使用预设文件了(libx264-default.ffpreset,libx264-hq.ffpreset,libx264-normal.ffpreset,libx264-fastfirstpass.ffpreset,libx264-max.ffpreset),下面的两个例子会指导你如何使用这些预设:

    命令:

 

ffmpeg -i infile -vcodec libx264 -vpre hq -b 1M -bt 1M -threads 0 outfile.mp4

    改变-vpre 后面的参数即可更改不同的预设,很容易理解这几个参数的意思

    备注(点击查看对应文件):

 

» default - 默认参数(x264 CLI default values)
» fastfirstpass - 快速转换(disables options unnecessary for first pass)
» normal - 正常(Dark Shikari’s Q55 preset)
» hq - 高质量转换(Dark Shikari’s Q75 preset)
» max - 最大文件(all options maxed out)

    您确实可以不使用预设文件,不过那样的话你转换视频或音频文件时要照顾到很多细节,代码会很长,使用预设文件省去了我们很多麻烦!升级ffmpeg和x264

    理所当然我们即使我们锁定了版本,我们还是会想到升级我们的ffmpeg和x264到最新的版本,我们可以使用下面的命令(假定您没有删除相应的svn和git同步文件):

 

 

sudo apt-get purge ffmpeg x264
cd ~/x264
make distclean
git pull
./configure
make
sudo checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-0.0ubuntu1"
cd ~/ffmpeg
make distclean
svn update
./configure --enable-gpl --enable-postproc --enable-pthreads --enable-libfaac --enable-libfaad --enable-libmp3lame --enable-libtheora --enable-libx264
make
sudo checkinstall --fstrans=no --install=yes --pkgname=ffmpeg --pkgversion "3:0.svn`date +%Y%m%d`-12ubuntu3"

   卸载ffmpeg和x264

    Ubuntu发行版Intrepid Ibex 8.10的操作:
    命令:
    sudo apt-get purge x264 ffmpeg build-essential yasm subversion git-core checkinstall texi2html libfaad-dev libfaac-dev libmp3lame-dev libtheora-dev
    Ubuntu发行版Hardy Heron 8.04:
    命令:

  

 

sudo apt-get purge x264 ffmpeg build-essential yasm subversion git-core checkinstall texi2html libfaad-dev libfaac-dev liblame-dev libtheora-dev

    引用和相关网站:
    本文英文原文: HOWTO: Compile the latest ffmpeg and x264 from source
    ffmpeg主页
    FFmpeg libx264 presets预设文件下载:ffpresets.zip (20)
    ffmpeg源代码configure帮助文件中文译文(编译说明)
    FFmpeg x264 encoding guide(FFmpeg x264编码指南英文版)

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值