使用Java分离音频左右声道
1.音频属性相关
音频采样所得的PCM都含有三个要素:声道(channel)、采样率(sample rate)、采样位数、时长。
1.1.声道
记录声音时,如果每次生成一个声波数据,称为单声道;每次生成两个声波数据,称为双声道(立体声)。单声道的声音只能使用一个喇叭发声,双声道的PCM可以使两个喇叭同时发声(一般左右声道有分工),更能感受到空间效果。
1.2.采样率
单位时间内采集的样本数,即:采样周期的倒数,指两个采样之间的时间间隔。采样频率越高,声音质量越好,但同时占用的带宽越大。一般情况下,22KHz相当于普通FM的音质,44KHz相当于CD音质,目前的常用采样频率都不超过48KHz。
1.3.采样位数
表示一个样本的二进制位数,即:每个采样点用多少比特表示。计算机中音频的量化深度一般为4、8、16、32位(bit)等。例如:采样位数为8 bit时,每个采样点可以表示256个不同的采样值,而采样位数为16 bit时,每个采样点可以表示65536个不同的采样值。采样位数的大小影响声音的质量,采样位数越多,量化后的波形越接近原始波形,声音的质量越高,而需要的存储空间也越多;位数越少,声音的质量越低,需要的存储空间越少。一般情况下,CD音质的采样位数是16 bit,移动通信是8 bit。
1.4.帧
音频在量化得到二进制的码字后,需要进行变换,而变换(MDCT)是以块为单位(block)进行的,一个块由多个(120或128)样本组成。而一帧内会包含一个或者多个块。帧的常见大小有960、1024、2048、4096等。一帧记录了一个声音单元,它的长度是样本长度和声道数的乘积。FFmpeg中 AVFrame 结构体中的 nb_samples 代表的就是一帧中单个声道的音频样本数量。
数字音频文件大小(Byte) = 采样频率(Hz)× 采样时长(S)×(采样位数 / 8)× 声道数(单声道为1,立体声为2)
2.FFmpeg介绍
FFmpeg 是一个专业的多媒体框架,能够解码、编码、转码、复用、解复用、流式传输、过滤和播放几乎所有格式的媒体文件。 其核心就是 FFmpeg 程序本身,是一个基于命令行的视频和音频处理工具,多用于视频转码、基础编辑(修剪和合并)、视频缩放、后期效果制作等场景。
ffmpeg -i <inputfile> -hide_banner
2.1.FFmpeg 常用操作
`ffmpeg -i ``
- 1.转码
$ ffmpeg -i input.avi output.mp4
- 2.提取音频
$ ffmpeg -i input.mp4 output.mp3
- 3.调整分辨率