PHP+ffmpeg音频格式转化踩坑实录
生活随笔
收集整理的這篇文章主要介紹了
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簡化安裝步驟,方便自己也方便有需要的朋友查看使用。
NASMcd ~/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 installYasmcd ~/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 installlibx264cd ~/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 installlibfdk_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 installcd ~/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 installcd ~/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
NASMcd ~/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 installYasmcd ~/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 installlibx264cd ~/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 installlibfdk_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 installcd ~/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 installcd ~/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+ffmpeg音频格式转化踩坑实录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法day19-希尔排序算法
- 下一篇: 将Helm编写的Chart推送到Harb