FFmpeg的使用记录

2018-04-01 20:38:42

之前开发一个微信公众好实时聊天的时候,由于项目需要,要求支持文字,文字+表情,图片,语音实时聊天,除了语音其他的还好说,可能第一次搞网页版语音聊天所以觉得麻烦吧,其实做完之后才发现并没有那么难,下面我讲解一下我遇到的问题:

主要的问题就是:

调用微信录音的问题,录完的音频文件存放在本地,也可以存到微信那边,但是微信那边只能存储几天,所以为了聊天的体验度,语音文件肯定不能放在微信那边。

于是我调用微信的录音接口,然后上传到自己的平台服务器,本想就大功告成,但是在html页面播放的时候才发现不能播放,原因是文件格式不支持,微信那边是.amr的格式, 而html不支持,所以另寻它路。

开始我寻思看看微信那边能不能直接录音成MP3格式的,但最后还是失败告别。

最后只能想着把amr格式的转成mp3的,开始我用的七牛云,但是七牛云的不怎么方便,所以决定试一下其他的办法,后来找到一个名为"ffmpeg"开源计算机程序,所以我决定用它来处理这个音频文件。开始我以为只要Linux的,但后面发下Window的也有。下面介绍下安装方法及使用吧。

基础命令:

1.将xxx.amr转成xxx.mp3

ffmpeg -i xxx.amr xxx.mp3

·

2.多个音频拼接为一个:

ffmpeg -i "concat:xxx1.mp3|xxx2.mp3|xxx3.mp3" -acodec copy xxx4.mp3
解释:
	-i代表输入参数
	contact:xxx1.mp3|xxx2.mp3|xxx3.mp3 代表着需要连接到一起的音频文件
	-acodec copy xxx4.mp3 重新编码并复制到新文件xxx4.mp3中

·

3.多个合成为一个,比如给某用户录音添加背景音乐

ffmpeg -i xxx.mp3 -i xxxbg1.mp3 -i xxxbg2.mp3 -filter_complex amix=inputs=3:duration=first:dropout_transition=2 xxxsave.mp3
解释:
	-i代表输入参数
	-filter_complex ffmpeg滤镜功能
	amix是混合多个音频到单个音频输出
	inputs=3代表是3个音频文件,如果更多则代表对应数字
	duration 确定最终输出文件的长度
	longest(最长)|shortest(最短)|first(第一个文件)
	dropout_transition
	The transition time, in seconds, for volume renormalization when an input stream ends. The default value is 2 seconds.
	-f mp3  输出文件格式
	xxxsave.mp3 保存文件

·

在代码中使用(这里演示的为php的用法):

$amr = $dirname.$filename;   源文件路径
$mp3 = $dirname.$name.'_wgc.mp3'; 保存路径
$command = "/usr/local/bin/ffmpeg -i $amr $mp3";
system($command,$error);

返回结果:

成功返回0,
失败(命令不存在等原因) 返回 非0值

安装方法:

window:
        先去官网下载window版的ffmpeg, 把bin目录放到环境变量中,然后cmd,具体使用命令请自行百度
linux(centos),一般情况可以跳过: 
         安装依赖包
		 	yum install -y automake autoconf libtool gcc gcc-c++
        创建编译源码的目录
			mkdir ~/ffmpeg_sources

编译&安装

Note: 如果您不需要特定的编码器,可以跳过相关部分,然后删除编译ffmpeg 时相应的./configure选项。例如,如果不需要libvorbis ,可以跳过这一节,然后从安装ffmpeg的部分去掉--enable-libvorbis

yasm:汇编器,新版本的ffmpeg增加了汇编代码

wget 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 && make && make install

lame:Mp3音频解码

wget http://jaist.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz 
tar -xzvf lame-3.99.5.tar.gz 
cd lame-3.99.5 && ./configure && make && make install

amr支持

wget http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-0.1.3.tar.gz 
tar -xzvf opencore-amr-0.1.3.tar.gz 
cd opencore-amr-0.1.3 && ./configure && make && make install

amrnb支持

wget http://www.penguin.cz/~utx/ftp/amr/amrnb-11.0.0.0.tar.bz2 
tar -xjvf amrnb-11.0.0.0.tar.bz2 
cd amrnb-11.0.0.0 && ./configure && make && make install

amrwb支持

wget http://www.penguin.cz/~utx/ftp/amr/amrwb-11.0.0.0.tar.bz2 
tar -xjvf amrwb-11.0.0.0.tar.bz2 
cd amrwb-11.0.0.0 && ./configure && make && make install

x264

git clone https://code.videolan.org/videolan/x264.git
// 假设装在 xxx 目录下
 ./configure --disable-asm --enable-shared --enable-static --prefix=xxx
make && make install
// 然后在 xxx/share 下建一个 x264 目录,把 x264 源码目录下的 x264.pc 拷到 xxx/share/x264 下
export PKG_CONFIG_PATH=xxx/share/x264  

如上操作需要注意安装目录哦,如果需要安装其他特定的编码器可以自行百度然后编译ffmpeg时加入相应的./configure选项##

###如果需要安装其他特定的编码器可以自行百度然后编译ffmpeg时加入相应的./configure选项

ffmpeg: 最好去官网下载最新的安装包 FFmpeg 使用最新版注意命令操作名称

wget https://ffmpeg.org/releases/ffmpeg-4.1.tar.bz2
tar -xjvf ffmpeg-4.1.tar.bz2
cd ffmpeg-4.1
./configure --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 -enable-shared --enable-libx264  --enable-gpl
make && make install

加载配置,最后写入config后,终端运行ffmpeg命令,出现success和已安装的扩展,则运行成功。

ldconfig

附录:

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

其他问题自行百度吧

本文由"putyy"原创,转载无需和我联系,但请注明来自putyy
您的浏览器不支持canvas标签,请您更换浏览器