如果您处于已安装工具的环境中,则转换文件实际上是一个非常简单的过程。对于 ffmpeg 和 sox,它们最基本形式的命令只是:
ffmpeg -i ./file.amr ./file.ogg
或者
sox ./file.amr ./file.ogg
因此,如果我们上传一个输入名称为“audio”的文件,从 PHP 中它看起来像:
<?php
if (isset($_FILES['audio']) && is_file($TmpFile=$_FILES['audio']['tmp_name'])) {
// I name uploaded files as curr ms timestamp and track file data via db.
$NewFile = './uploads/'.round(microtime(true)*1000).'.ogg';
shell_exec("ffmpeg -i {$TmpFile} -acodec libvorbis ".$NewFile);
// You'll want to add other file data to the database here...
} else {
// Deal with bad file uploads...
}
?>
不幸的是,我的服务器环境没有安装这些工具,所以我必须手动编译它们。具体来说,我使用的是虚拟共享主机,因此我没有系统上的通用访问权限。请记住,这反映在我用来安装各种 ffmpeg 组件的一些代码中。
cd ~/
curl -O http://ffmpeg.org/releases/ffmpeg-2.0.tar.gz
tar -xzvf ffmpeg-2.0.tar.gz
mv -fv ./ffmpeg-2.0 ./ffmpeg
rm -v ./ffmpeg-2.0.tar.gz
cd ~/ffmpeg
curl -O http://downloads.xiph.org/releases/ogg/libogg-1.3.1.tar.gz
tar -xzvf libogg-1.3.1.tar.gz
rm -v libogg-1.3.1.tar.gz
cd libogg-1.3.1
./configure --prefix="$HOME/ffmpeg" --disable-shared
make
make install
make distclean
cd ~/ffmpeg/
curl -O http://downloads.xiph.org/releases/vorbis/libvorbis-1.3.3.tar.gz
tar -xzvf libvorbis-1.3.3.tar.gz
rm -v libvorbis-1.3.3.tar.gz
cd libvorbis-1.3.3
./configure --prefix="$HOME/ffmpeg" --with-ogg="$HOME/ffmpeg" --disable-shared
make
make install
make distclean
cd ~/ffmpeg/
curl -O -L http://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-0.1.3.tar.gz
tar -xzvf opencore-amr-0.1.3.tar.gz
rm -v opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3
./configure --prefix="$HOME/ffmpeg" --disable-shared --bindir="$HOME/bin"
make
make install
make distclean
cd ~/ffmpeg/
curl -O http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz
tar -xzvf yasm-1.2.0.tar.gz
rm -v yasm-1.2.0.tar.gz
cd yasm-1.2.0
./configure --prefix="$HOME/ffmpeg" --bindir="$HOME/bin"
make
make install
make distclean
cd ~/ffmpeg/
mkdir ~/ffmpeg/tmp
chmod 777 ~/ffmpeg/tmp
export TMPDIR="$HOME/ffmpeg/tmp"
export PKG_CONFIG_PATH="$HOME/ffmpeg/lib/pkgconfig"
./configure --prefix="$HOME/ffmpeg" --extra-cflags="-I$HOME/ffmpeg/include" --extra-ldflags="-L$HOME/ffmpeg/lib" --bindir="$HOME/bin" --extra-libs="-ldl" --enable-gpl --enable-nonfree --enable-version3 --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvorbis
make
make install
make distclean
rm -rfv $TMPDIR
export TMPDIR=""
export PKG_CONFIG_PATH=""
您可以将上述 bash 命令复制并粘贴到 shell 中,也可以将它们放入可执行脚本中,它应该会处理所有事情。您可能需要检查每个组件的最新版本并相应地更新代码。如果您还使用不同的文件格式,您可能还想添加其他库,但这归结为我特别需要的。
您还可以使用:
git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
如果您安装了 git,或者如果您既没有 git 也没有 curl,则可以删除安装脚本中的第一个代码块,您可以下载每个代码并上传到您的服务器或使用 fget 或类似的东西。
总而言之,这相当于搜索文件、跟踪编译错误、跟踪我的场景的正确选项以及这种乏味的其他方面,这构成了我最不喜欢的开发工作中最糟糕的部分。我希望这篇文章可以使其他人免于这种不必要的痛苦和折磨:-)