1.什么是FFmpeg?现在我们来看看百度百科的介绍。
FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多codec都是从头开发的。
2.编译所需源码包
yasm:http://yasm.tortall.net/Download.html(汇编器,新版本的ffmpeg增加了汇编代码)
lame:http://lame.sourceforge.net/download.php(Mp3音频解码)
OpenCore AMR:http://sourceforge.net/projects/opencore-amr
AmrNB:http://www.penguin.cz/~utx/amr
AmrWB:http://www.penguin.cz/~utx/amr
FFMpeg:http://ffmpeg.org/download.html。
分别解压缩并编译上述源码包
#tar xzvf *.tar.gz
#tar xjvf *.tar.bz2
解压后直接使用
#./configure
#make
#make install
命令进行编译安装。
编译FFMpef的时候稍微特殊一点:
#./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-shared
#make
#make install
#ldconfig
最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。
3.使用方法
MP3转换AMR: ffmpeg -i 1.mp3 -ac 1 -ar 8000 1.amr
AMR转换MP3: ffmpeg -i 1.amr 1.mp3
可能遇到的问题
1.ffmpeg默认安装目录为“/usr/local/lib”,有些64位系统下软件目录则为“/usr/lib64”,编译过程中可能会出现
“ffmpeg: error while loading shared libraries: libmp3lame.so.0: cannot open shared object file: No such file or directory”等类似的错误,
解决办法是建立软链接:
#ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0
2.此时如果出现以下提示:
ffmpeg: error while loading shared libraries: libavdevice.so.54: cannot open shared object file: No such file or directory
可以通过如下方式查看ffmpeg的动态链接库哪些没有找到:
# ldd `which ffmpeg`
libavdevice.so.54 => not found
libavfilter.so.3 => not found
libavformat.so.54 => not found
libavcodec.so.54 => not found
libswresample.so.0 => not found
libswscale.so.2 => not found
libavutil.so.51 => not found
libm.so.6 => /lib64/libm.so.6 (0x00002ab7c0eb6000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ab7c100b000)
libc.so.6 => /lib64/libc.so.6 (0x00002ab7c1125000)
/lib64/ld-linux-x86-64.so.2 (0x00002ab7c0d9a000)
如果类似于上面的输出内容,查找以上类库:
# find /usr/local/lib/ | grep -E "libavdevice.so.54|libavfilter.so.3|libavcodec.so.54"
/usr/local/lib/libavfilter.so.3.17.100
/usr/local/lib/libavcodec.so.54.59.100
/usr/local/lib/libavdevice.so.54
/usr/local/lib/libavcodec.so.54
/usr/local/lib/libavfilter.so.3
/usr/local/lib/libavdevice.so.54.2.101
会发现全部在/usr/local/lib/下
查看链接库配置文件
# more /etc/ld.so.conf | grep /usr/local/lib
如果不包含的话,需要编辑此文添加:
/usr/local/lib
/usr/local/lib64
运行配置命令
# ldconfig
----------------------------------------------------------------------------------------------------------
以上为转载
1 如果安装amrnb遇到错误:
configure: error: You need patch utility to prepare sources.
执行:
yum install patch
2 遇到ERROR: libopencore_amrnb not found
cd ..
wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/0.1.2/opencore-amr-0.1.2.tar.gz?r=http://sourceforge.net/projects/opencore-amr/&ts=1285256783&use_mirror=ufpr
tar -xf opencore-amr-0.1.2.tar.gz
cd opencore-amr-0.1.2
./configure
make && make install clean
3 出现"make: *** [libavcodec/libavcodec.so.55] Error 1"
make clean 一下再./configure ...
安装ffmpeg-php
(1)下载安装包
wget http://jaist.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/0.5.3.1/ffmpeg-php-0.5.3.1.tbz2
或http://jaist.dl.sourceforge.net/project/ffmpeg-php/ffmpeg-php/
安装ffmepg-php
#tar -jxvf ffmpeg-php-0.6.0.tbz2
#cd ffmepg-php
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config --with-ffmpeg=/usr/local/ffmepg
#make && make install
报错情况
make: *** [ffmpeg-php.lo] 错误 1
解决:
# mv ffmpeg-php.loT ffmpeg-php.lo
make: *** [ffmpeg_movie.lo] 错误 1
解决:
# mv ffmpeg_movie.loT ffmpeg_movie.lo
make: *** [ffmpeg_frame.lo] 错误 1
解决:
# mv ffmpeg_frame.loT ffmpeg_frame.lo
make: *** [ffmpeg_errorhandler.lo] 错误 1
解决:
# mv ffmpeg_errorhandler.loT ffmpeg_errorhandler.lo
make: *** [ffmpeg_tools.lo] 错误 1
解决:
# mv ffmpeg_tools.loT ffmpeg_tools.lo
(4)测试
在php的配置php.ini文件,添加如下内容
extension=ffmpeg.so
重启apache或php-fpm,用php测试
/usr/local/php/bin/php -r 'phpinfo();' | grep ffmpeg
ffmpeg
ffmpeg support (ffmpeg-php) => enabled
ffmpeg-php version => 0.5.3.1
ffmpeg-php gd support => enabled
ffmpeg.allow_persistent => 0 => 0
ffmpeg.show_warnings => 0 => 0
............................省略
64位win7系统下ffmpeg的php扩展的安装
我在我的笔记本上安装了64位的win7,php的版本和上一个都是一样的,然后也是下载了那个版本(win32)的ffmpeg扩展包,然后把php_ffmpeg.dll放入到php的ext目录下,把其余的放入system32下。发现无效,去apache的的error.log查看也是没有什么错误提醒,搞得我很郁闷,我还在csdn上发帖子也是告诉我去error.log上去查看错误,但是就是看不到,我还尝试过在php.ini中写一个错误的dll,发现apache的error.log下也是看不到错误。
最终发现这样可以解决问题:还是把php_ffmpeg.dll放入到ext下,其余的dll不要放在system32下,而是要放入64位系统独有的C:WindowsSysWOW64目录下,然后就好了。
PS:尽管ffpmpeg有64位的扩展,但是这个64位是和php的一致的,而不是和你的操作系统一致的。我最终调试出来问题是用在命令下下运行php,直接如果有错误的话,比如你加载了错误的dll,这个时候会弹出来错误的,很快帮助能解决问题!