PHP+ffmpeg音频格式转化踩坑实录

       最近在开发基于微信小程序的语音对话智能助手的产品时,遇到了一个音频格式转化的小坑。由于科大讯飞AIUI的接口 只支持pcm、wav两种 未压缩的音频格式和speex带宽压缩的音频。而微信小程序录音的音频文件是MP3格式的,这就需要用到音频格式转化了。既然是音频格式转化自然就想到了大名鼎鼎的 ffmpeg多媒体格式转化工具。服务器采用centOS,我按照官方文档进行了枯燥的安装工作。附官方文档: http://trac.ffmpeg.org/wiki/CompilationGuide/Centos#FFmpeg
        耗时一个多小时,安装完成。 shell下执行
ffmpeg -i  /public/uploads/20180503/test.mp3 -f wav  -ar 16000 -ac 1 public/uploads/20180503/test.wav
格式转化完成。以为大功告成。接下来该用PHP的exec命令运行ffmpeg了。没有生成预想中的test.wav文件。一般这种问题就是权限问题了。用 tail -f error_log_20180503 |grep ffmpeg 命令查看apache的错误日志,提示 sh: /root/bin/ffmpeg: Permission denied 一看这个提示,那肯定没错就是权限问题了。ffmpeg安装在了root目录,apache的运行用户肯定不能是root,那肯定没权限执行ffmpeg命令了。怪只怪当初安装ffmpeg太匆忙,直接用了$HOME常量来作为 ffmpeg的安装目录。$HOME是登录用户的根目录,用root登录自然是root.没办法只能重新安装了。由于ffmpeg依赖的包众多,还包括汇编的库。现整理只支持音频格式转化的ffmpeg简化安装步骤,方便自己也方便有需要的朋友查看使用。

NASM

cd ~/ffmpeg_sources
curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2
tar xjvf nasm-2.13.02.tar.bz2
cd nasm-2.13.02
./autogen.sh
./configure --prefix="/var/local/ffmpeg_build" --bindir="/var/local/bin"
make
make install

Yasm

cd ~/ffmpeg_sources
curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xzvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure --prefix="/var/local/ffmpeg_build" --bindir="/var/local/bin"
make
make install

libx264

cd ~/ffmpeg_sources
git clone --depth 1 http://git.videolan.org/git/x264
cd x264
PKG_CONFIG_PATH="/var/local/ffmpeg_build/lib/pkgconfig" ./configure --prefix="/var/local/ffmpeg_build" --bindir="var/local/bin" --enable-static
make
make install

libfdk_aac
cd ~/ffmpeg_sources
git clone --depth 1 https://github.com/mstorsjo/fdk-aac
cd fdk-aac
autoreconf -fiv
./configure --prefix="/var/local/ffmpeg_build" --disable-shared
make
make install

cd ~/ffmpeg_sources
curl -O -L http://downloads.xiph.org/releases/ogg/libogg-1.3.3.tar.gz
tar xzvf libogg-1.3.3.tar.gz
cd libogg-1.3.3
./configure --prefix="/var/local/ffmpeg_build" --disable-shared
make
make install

cd ~/ffmpeg_sources
curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
PATH="/var/local/bin:$PATH" PKG_CONFIG_PATH="/var/local/ffmpeg_build/lib/pkgconfig" ./configure \
  --prefix="/var/local/ffmpeg_build" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I/var/local/ffmpeg_build/include" \
  --extra-ldflags="-L/var/local/ffmpeg_build/lib" \
  --extra-libs=-lpthread \
  --extra-libs=-lm \
  --bindir="/var/local/bin" \
  --enable-gpl \
  --enable-libfdk_aac \
  --enable-libfreetype \
  --enable-libx264 \
  --enable-nonfree
make
make install
hash -r

最后想提一下,PHP执行exec命令是不太安全的,一般来讲应该作为内网接口服务,不对外提供服务的。这样可以最大程度保证服务器的安全。

你可能感兴趣的:(PHP开发,编程人生)