设为首页 收藏本站
查看: 1908|回复: 0

[经验分享] 用ffmpeg合并音频文件

[复制链接]

尚未签到

发表于 2017-6-21 21:10:40 | 显示全部楼层 |阅读模式
  1 问题描述
  打电话的对话,被拆分成了两个PCM文件。其中主叫的录音文件A.pcm,被叫的录音为B.pcm。
  问题是怎么合成一个混音的对话文件AB.wav。
  2 WAV文件的录音格式



常见的声音文件主要有两种,分别对应于单声道(11.025KHz 采样率、8Bit 的采样值)和双声道(44.1KHz 采样率、16Bit 的采样值)。
采样率是指:声音信号在“模→数”转换过程中单位时间内采样的次数。采样值是指每一次采样周期 。
WAVE 文件数据块包含以脉冲编码调制(PCM)格式表示的样本。WAVE 文件是由样本组织而成的。在单声道 WAVE 文件中,声道0代表左声道,声道1代表右声道。
在多声道WAVE文件中,样本是交替出现的。
  下面我们具体地分析 WAV文件的格式

endianfield nameSize说明计算方式
bigChunkID4文件头标识,一般就是" RIFF" 四个字母ASCII 码表示的“RIFF”。(0x52494646)
littleChunkSize4整个数据文件的大小,不包括上面ID和Size本身36+SubChunk2Size,或是4 + ( 8 + SubChunk1Size ) + ( 8 + SubChunk2Size ),这是整个数据块的大小(不包括ChunkID和ChunkSize的大小)
bigFormat4一般就是" WAVE" 四个字母ASCII 码表示的“WAVE”。(0x57415645)
bigSubChunk1ID4格式说明块,本字段一般就是"fmt "新的数据块(格式信息说明块)ASCII 码表示的“fmt ”——最后是一个空格。(0x666d7420)
littleSubChunk1Size4本数据块的大小,不包括ID和Size字段本身本块数据的大小(对于PCM,值为16)。
littleAudioFormat2音频的格式说明PCM = 1 (比如,线性采样),如果是其它值的话,则可能是一些压缩形式
littleNumChannels2声道数1 => 单声道  |  2 => 双声道
littleSampleRate4采样率采样率,如 8000,44100 等值
littleByteRate4比特率,每秒所需要的字节数等于: SampleRate * numChannels * BitsPerSample / 8
littleBlockAlign2数据块对齐单元等于:NumChannels * BitsPerSample / 8
littleBitsPerSample2采样时模数转换的分辨率采样分辨率,也就是每个样本用几位来表示,一般是 8bits 或是 16bits
bigSubChunk2ID4真正的声音数据块,本字段一般是"data"新数据块,真正的声音数据。ASCII 码表示的“data “(0x64617461)
littleSubChunk2Size4本数据块的大小,不包括ID和Size字段本身数据大小,即,其后跟着的采样数据的大小。
littleDataN音频的采样数据真正的声音数据
  3 查看录音的PCM文件



1 查看录音的二进制文件
2 给出合成的思路。头文件的字节数
3 JAVA源码
4 安装ffmpeg



pcm转立体声mp3
ffmpeg -i input1.pcm -i input2.pcm -filter_complex "amovie=input1.pcm [l]; amovie=input2.pcm [r]; [l] [r] amerge" output.mp3

amr转混音amr
ffmpeg -i input1.amr -i input2.amr -filter_complex amix=inputs=2:duration=longest  -ab 12.2k -ar 8000 -ac 1 output.amr

在后面加上 -loglevel quiet -y, 可以覆盖输出文件,避免输出日志
如: ffmpeg -i input1.amr -i input2.amr -filter_complex amix=inputs=2:duration=longest  -ab 12.2k -ar 8000 -ac 1 output.amr -loglevel quiet -y
  在做的过程中,渐渐发现这一切早有工具实现。下面来看看ffmpeg工具。
   4 ffmpeg的安装


DSC0000.gif DSC0001.gif


ffmpeg 安装步骤
########################################################################################
root 用户下安装下列依赖软件

1  下载 ffmpeg
wget http://ffmpeg.org/releases/ffmpeg-3.1.2.tar.bz2
2  下载mp3依赖库libmp3lame
wget http://downloads.sourceforge.net/lame/lame-3.99.5.tar.gz

安装libmp3lame
tar -zxvf lame-3.99.5.tar.gz
./configure
make
make install
3 安装yasm
yum install yasm
4 安装Xext
yum install libXext-devel
5 安装amr的依赖库opencore-amr
wget --no-check-certificate https://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-0.1.3.tar.gz/download
./configure
make
make install
6 安装ffmpeg-3.1.2.tar.bz2
tar -jxvf ffmpeg-3.1.2.tar.bz2
./configure --enable-shared --enable-nonfree --enable-gpl --enable-decoder=aac --enable-demuxer=mov --enable-x11grab --enable-zlib --enable-protocol=http --enable-filter=aformat --enable-filter=volume --enable-filter=aresample --enable-version3 --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
-----------
configue 一定要没有错误,如果有错误,按照提示安装相应的依赖软件
make
make install
########################################################################################

安装好后输入ffmpeg 查看
如果报错ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No
root 下输入命令
ldconfig
如果得到
ffmpeg version 3.1.2 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-4)
configuration: --enable-shared --enable-nonfree --enable-gpl --enable-decoder=aac --enable-demuxer=mov --enable-x11grab --enable-zlib --enable-protocol=http --enable-filter=aformat --enable-filter=volume --enable-filter=aresample --enable-version3 --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb
libavutil      55. 28.100 / 55. 28.100
libavcodec     57. 48.101 / 57. 48.101
libavformat    57. 41.100 / 57. 41.100
libavdevice    57.  0.101 / 57.  0.101
libavfilter     6. 47.100 /  6. 47.100
libswscale      4.  1.100 /  4.  1.100
libswresample   2.  1.100 /  2.  1.100
libpostproc    54.  0.100 / 54.  0.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run 'man ffmpeg'
则安装成功
ffmpeg安装步骤  5 测试效果
  
  5.1  1.amr 和 2.amr 是左右声道的录音,现在合成混音1_2.amr



ffmpeg -i 1.amr -i 2.amr -filter_complex amix=inputs=2:duration=longest:dropout_transition=2  -ab 12.2k -ar 8000 -ac 1 1_2.amr

  5.2  1.wav 和 2.wav是左右声道的录音,现在合成立体声1_2.mp3,即左声道是1的声音,右声道是2的声音。



ffmpeg -i 1.wav -i 2.wav -filter_complex "amovie=1.wav [l]; amovie=2.wav [r]; [l] [r] amerge"  1_2.mp3

  参考资料
  1 ffmpeg常用转换命令,支持WAV转AMR   http://www.cnblogs.com/xiaofengfeng/p/3573025.html
  2 WAVE 文件格式分析   http://www.cnblogs.com/liyiwen/archive/2010/04/19/1715715.html
  3 How to compile FFmpeg on CentOS, Fedora or RHEL http://ask.xmodulo.com/compile-ffmpeg-centos-fedora-rhel.html
  4  Linux下ffmpeg的完整安装 http://www.cnblogs.com/wanghetao/p/3386311.html
  5 linux系统中ffmpeg安装配置步骤 http://www.111cn.net/sys/linux/82964.htm  
  6 error while loading shared libraries https://forum.ivorde.com/ffmpeg-error-while-loading-shared-libraries-libavdevice-so-52-cannot-open-shared-object-file-no-t129.html

  7 FFmpeg Filters Documentation  http://ffmpeg.org/ffmpeg-filters.html
  8 ffmpeg的中文文档  https://wanglongqi.github.io/tools/2014/12/23/ffmpegdoc/
  9 How to change ffmpeg -threads settings  http://superuser.com/questions/792525/how-to-change-ffmpeg-threads-settings

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386554-1-1.html 上篇帖子: (转)机器学习中的损失函数 下篇帖子: (转) 将ASP.NET Core应用程序部署至生产环境中(CentOS7)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表