Linux下安装视频转换工具ffmpeg
最近在做项目的时候,遇到一个问题就是要将用户上传的视频转成flv格式或mp4格式并用flash插件在前端播放, 我决定采用ffmpeg (http://www.ffmpeg.org/ )实现。之前已经做过在windows系统上使用ffmpeg,但是放到Linux中不能用。通过参考网上的一些资料以及结合项目的实际的情况,花了两天时间终于将他搞定。下面先说一下ffmpeg在Linux上的安装方法:
解码器集合(包含安装ffmpeg用到的所有解码器)下载地址:http://download.youkuaiyun.com/detail/lintianlin/8547057
一、首先是安装各种解码器
1. lame
lame-398-1.tar.gz
Url:http://sourceforge.net/project/showfiles.php?group_id=290&package_id=309
安装方法如下:
tar -zxvf /opt/spzh/lame-398-1.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/lame-398-1
./configure --enable-shared --prefix=/usr
make
make install
tar -zxvf /opt/spzh/lame-398-1.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/lame-398-1
./configure --enable-shared --prefix=/usr
make
make install
<span style="color:#3333FF;">
</span>
<span style="color:#3333FF;">注:tar -zxvf 解码器压缩包路径 -C 解压好的文件存放位置
--prefix=安装位置</span>
2. libogg
libogg-1.3.2.tar.gz
Url:http://www.xiph.org/downloads/
安装方法如下
tar -zxvf /opt/spzh/libogg-1.3.2.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/libogg-1.3.2
./configure --prefix=/usr
make
make install
tar -zxvf /opt/spzh/libogg-1.3.2.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/libogg-1.3.2
./configure --prefix=/usr
make
make install
3. libvorbis
libvorbis-1.3.5.tar.gz
Url:http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
(libvorbis依赖于libogg, 所以libogg必须先于libvorbis安装)
安装方法如下:
tar -zxvf /opt/spzh/libvorbis-1.3.5.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/libvorbis-1.3.5
./configure --prefix=/usr
make
make install
tar -zxvf /opt/spzh/libvorbis-1.3.5.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/libvorbis-1.3.5
./configure --prefix=/usr
make
make install
4. xvid
xvidcore-1.1.3.tar.gz
Url:http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
安装方法如下:
tar -zvxf /opt/spzh/xvidcore-1.1.3.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/xvidcore-1.1.3/build/generic
./configure --prefix=/usr
make
make install
tar -zvxf /opt/spzh/xvidcore-1.1.3.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/xvidcore-1.1.3/build/generic
./configure --prefix=/usr
make
make install
5. x264
last_x264.tar.bz2 (其中包含的目录是x264-snapshot-20141218-2245)
Url:http://www.videolan.org/developers/x264.html
ftp://ftp.videolan.org/pub/videolan/x264/snapshots/
安装方法如下:
tar -jxvf /opt/spzh/last_x264.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/x264-snapshot-20141218-2245
./configure --prefix=/usr --enable-shared
make
make install
tar -jxvf /opt/spzh/last_x264.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/x264-snapshot-20141218-2245
./configure --prefix=/usr --enable-shared
make
make install
6. libdts
libdca-0.0.5.tar.bz2
Url: http://www.videolan.org/developers/libdca.html
安装方法如下:
tar -jxvf /opt/spzh/libdca-0.0.5.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/libdca-0.0.5
./configure --prefix=/usr
make
make install
tar -jxvf /opt/spzh/libdca-0.0.5.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/libdca-0.0.5
./configure --prefix=/usr
make
make install
7. a52
a52dec-0.7.4.tar.gz
http://liba52.sourceforge.net/downloads.html
安装方法如下:
tar -zvxf /opt/spzh/a52dec-0.7.4.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/a52dec-0.7.4
./configure --prefix=/usr
make
make install
tar -zvxf /opt/spzh/a52dec-0.7.4.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/a52dec-0.7.4
./configure --prefix=/usr
make
make install
8. faad2
faad2-2.7.tar.gz
url:http://www.audiocoding.com/downloads.html
安装方法如下:
tar -zvxf /opt/spzh/faad2-2.7.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/faad2-2.7
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
tar -zvxf /opt/spzh/faad2-2.7.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/faad2-2.7
autoreconf -vif
./configure --prefix=/usr --with-mp4v2 --enable-shared
make
make install
9. faac
faac-1.28.tar.gz
http://www.audiocoding.com/downloads.html
安装方法如下:
tar -zvxf /opt/spzh/faac-1.28.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/faac-1.28
./bootstrap
./configure --prefix=/usr
make
make install
tar -zvxf /opt/spzh/faac-1.28.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/faac-1.28
./bootstrap
./configure --prefix=/usr
make
make install
10. amr-nb
amrnb-10.0.0.0.tar.bz2
url:http://pan.baidu.com/s/1eQxUnYy
安装方法如下:
tar -jxvf /opt/spzh/amrnb-10.0.0.0.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/amrnb-10.0.0.0
./configure --prefix=/usr
make
make install
tar -jxvf /opt/spzh/amrnb-10.0.0.0.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/amrnb-10.0.0.0
./configure --prefix=/usr
make
make install
11. amr-wb
amrwb-7.0.0.1.tar.bz2
url:http://pan.baidu.com/s/1eQxUnYy
安装方法如下:
tar -jxvf /opt/spzh/amrwb-7.0.0.1.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/amrwb-7.0.0.1
./configure --prefix=/usr
make
make install
tar -jxvf /opt/spzh/amrwb-7.0.0.1.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/amrwb-7.0.0.1
./configure --prefix=/usr
make
make install
至此,解码器安装完毕,开始安装ffmpeg。
二、安装ffmpeg
ffmpeg-0.8.3
tar -jxvf /opt/spzh/ffmpeg-0.8.3.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/ffmpeg-0.8.3
./configure --enable-shared --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
error while loading shared libraries: libavdevice.so.53: cannot open shared object file: No such file or director
错误,是因为共享库文件安装到了/usr/local/ffmpeg2/lib目录下, 那么把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:
# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/ffmpeg2/lib" >> /etc/ld.so.conf
# ldconfig
tar -jxvf /opt/spzh/ffmpeg-0.8.3.tar.bz2 -C /opt/spzh/wj
cd /opt/spzh/wj/ffmpeg-0.8.3
<code class="cpp plain">./configure --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffpla</code><pre name="code" class="java">make
make install
不出意外的话,ffmpeg到此已经安装完成了。
运行ffmpeg,
/usr/local/ffmpeg2/bin/./ffmpeg
/usr/local/ffmpeg2/bin/./ffmpeg
出现如下代码说明安装成功:
ffmpeg version 0.8.3, Copyright (c) 2000-2011 the FFmpeg developers
built on Mar 25 2015 18:40:19 with gcc 4.4.5 20110214 (NeoKylin 4.4.5-6)
configuration: --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
libavutil 51. 9. 1 / 51. 9. 1
libavcodec 53. 7. 0 / 53. 7. 0
libavformat 53. 4. 0 / 53. 4. 0
libavdevice 53. 1. 1 / 53. 1. 1
libavfilter 2. 23. 0 / 2. 23. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 51. 2. 0 / 51. 2. 0
ffmpeg version 0.8.3, Copyright (c) 2000-2011 the FFmpeg developers
built on Mar 25 2015 18:40:19 with gcc 4.4.5 20110214 (NeoKylin 4.4.5-6)
configuration: --prefix=/usr/local/ffmpeg2 --enable-libmp3lame --enable-libvorbis --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libx264 --enable-libxvid --enable-postproc --enable-ffserver --enable-ffplay
libavutil 51. 9. 1 / 51. 9. 1
libavcodec 53. 7. 0 / 53. 7. 0
libavformat 53. 4. 0 / 53. 4. 0
libavdevice 53. 1. 1 / 53. 1. 1
libavfilter 2. 23. 0 / 2. 23. 0
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 51. 2. 0 / 51. 2. 0
接下来说一下我在安装过程中出现的一些问题以及解决方法:
1.最后在安装ffmpeg时,可能会提示找不到yasm,所以需要安装一下yasm
yasm-1.3.0.tar.gz
yasm-1.3.0.tar.gz
安装方法如下:
tar -zvxf /opt/spzh/yasm-1.3.0.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/yasm-1.3.0
./configure --prefix=/usr
make
make install
<pre name="code" class="java">tar -zvxf /opt/spzh/yasm-1.3.0.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/yasm-1.3.0
./configure --prefix=/usr
make
make install
2.提示找不到libopencore-amrnb和libopencore-amrwb,需要安装opencore-amr-0.1.3.tar.gz
安装过程如下:
tar -zvxf /opt/spzh/opencore-amr-0.1.3.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/opencore-amr-0.1.3
./configure --prefix=/usr
make
make install
tar -zvxf /opt/spzh/opencore-amr-0.1.3.tar.gz -C /opt/spzh/wj
cd /opt/spzh/wj/opencore-amr-0.1.3
./configure --prefix=/usr
make
make install
3.
在编译一个软件的时候,在 ./configure 和 make 之后可能会出现如下错误:
libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1ubuntu1, but the
libtool: definition of this LT_INIT comes from libtool 2.4.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1ubuntu1
libtool: and run autoconf again.
make[5]: *** 1 Error 63
libtool: Version mismatch error. This is libtool 2.4.2 Debian-2.4.2-1ubuntu1, but the
libtool: definition of this LT_INIT comes from libtool 2.4.
libtool: You should recreate aclocal.m4 with macros from libtool 2.4.2 Debian-2.4.2-1ubuntu1
libtool: and run autoconf again.
make[5]: *** 1 Error 63
解决方法很简单:
运行 autoreconf -ivf 即可。
4.因为本机没有安装autoreconf,所以使用
apt-get install autoreconf2.13
安装了autoreconf之后就能使用
autoreconf -ivf 命令了
5.faac编译时候出现了
make[3]: *** [3gp.o] 错误 127
make[3]: Leaving directory `/root/ffmpeg-source/faac-1.28/common/mp4v2'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/root/ffmpeg-source/faac-1.28/common'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/root/ffmpeg-source/faac-1.28'
make: *** [all] 错误 2
对于这个问题,注释掉faac-1.28/common/mp4v2/mpeg4ip.h 里的第126行
char *strcasestr(const char *haystack, const char *needle);
重新编译就可以了
6.我开始的时候将解码器都安装在/opt/spzh/jmq文件夹下面,安装的ffmpeg的时候安装失败,通过在网上找资料发现资料中解码器大都安装在/usr下面,所以我又在没有卸载原来的解码器的情况下,在/usr下面又安装了一遍,再安装ffmpeg时就报找不到各种解码器的错误,其实我这些解码器已经安装了,后来才发现第二次安装ffmpeg的时候,他找的是第一次解码器安装的路径,所以有的解码器会找不到。解决方法:我们只需将第一次装解码器的那些文件删除或者 clean一下。
文章参考了http://blog.youkuaiyun.com/lintianlin/article/details/44651199,特此感谢作者