您的浏览器不支持canvas标签,请您更换浏览器

FFmpeg的使用记录

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

主要的问题就是:

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

于是我调用微信的录音接口,然后上传到自己的平台服务器,本想就大功告成,但是在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
	
	
	

如上操作需要注意安装目录哦,如果需要安装其他特定的编码器可以自行百度然后编译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
	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
	
	

其他问题自行百度吧

LW放下的博客
请先登录后发表评论
  • latest comments
  • 总共0条评论