Sox媒体处理软件基本使用

安装

1sudo apt-get install sox 

查看音频信息

1.通过play查看音频格式:

1play music.mp3

出错play FAIL formats: no handler for file extension `mp3’的解决:

1sudo apt-get install libsox-fmt-mp3 

效果:

 1$play music.mp3 
 2play WARN alsa: can't encode 0-bit Unknown or not applicable
 3
 4music.mp3:
 5
 6 File Size: 8.02M     Bit Rate: 195k
 7  Encoding: MPEG audio    
 8  Channels: 2 @ 16-bit   Track: 1
 9Samplerate: 48000Hz      Album: ノアール
10Replaygain: off         Artist: 傘村トータ/小春六花
11  Duration: 00:05:28.20  Title: ノアール
12
13In:2.91% 00:00:09.56 [00:05:18.64] Out:459k  [  -===|===-  ]        Clip:0 

2.使用soxi或者sox --i

 1$soxi music.mp3 
 2
 3Input File     : 'music.mp3'
 4Channels       : 2
 5Sample Rate    : 48000
 6Precision      : 16-bit
 7Duration       : 00:05:28.20 = 15753600 samples ~ 24615 CDDA sectors
 8File Size      : 8.02M
 9Bit Rate       : 195k
10Sample Encoding: MPEG audio (layer I, II or III)
11Comments       : 
12Title=ノアール
13Artist=傘村トータ/小春六花
14Album=ノアール
15Tracknumber=1
16Discnumber=01

功能

1sox [global-options]
2[format-options] infile1
3[[format-options] infile2] ...
4[format-options] outfile
5[effect [effect-options]] ...

格式转化

基础知识

对于音频数据格式的描述,主要通过以下 4 种属性:

  • 采样率(sample rate):指声音由模拟信号转换成数字信号的过程中,每秒从连续信号中提取的用于组成离散信号的样本个数。 音频CD所用的采样率为 44100 Hz,数字音频磁带和许多计算机系统使用 48000 Hz,专业级音频系统通常使用 96000 Hz。
  • 采样大小(sample size 或 Precision):音频采样时用于存储每个样本的数据位数(bits)。如今 16 bit 的采样大小已被广泛使用,24 bit 主要用于专业音频领域。
  • 编码格式(data encoding):即每个音频样本的表示(即“编码”)方式。常用的编码类型包括 floating-point、μ-law、ADPCM、singed-integer PCM、MP3 和 FLAC 等。
  • 通道(channel):即文件中包含的音频通道的数量。其中单声道(mono)和双声道(stereo)是最常见的两种,“环绕声”音频(Surround sound)通常包含六个或更多声道。

此外,音频文件还使用比特率(Bit Rate)表示一个单位时间内编码音频信号占用的存储空间大小, 它的数值一般取决于所有的上述四个参数。 MP3 编码的立体声音乐通常具有 128-196kbps 的比特率, FLAC 编码的立体声音乐通常具有 550-760kbps 的比特率。

SoX 可以处理 self-describingraw 格式的音频文件。 self-describing 格式(如 WAV、FLAC、MP3)的文件包含一个用于描述信号和编码属性的文件头,而 rawheadless 格式的音频则不包含这些信息。

所以当 raw 格式的音频作为输入文件时,需要在 sox 命令的格式选项里指定其信号和编码属性。

常用的音频格式选项:

选项 描述
-b, –bits BITS 每个编码样本占用的数据位数
-c, –channels CHANNELS 音频文件包含的通道数
-e, –encoding ENCODING 音频文件的编码类型
-r, –rate RATE 音频文件的采样率
-t, –type FILE-TYPE 音频文件的文件类型

上述选项适用于输入或输出文件,主要用于说明 raw(或 headless)文件作为输入时的格式信息,或格式转换时指定输出文件的具体参数。

需要注意的是,-e参数指定的是紧跟在后面那个文件的编码,如果想要输出指定格式,就需要在input之后加上-e参数。

命令

  • soxisox --i:命令可以通过分析音频文件的文件头,获取其元数据(如通道数采样率编码等)。soxi 命令跟上某个特定的选项可以只获取该选项对应的信息

  • sox <inputfile> -n stat:获取某音频文件的统计信息。

  • sox existing-file.wav −dplay existing-file.wav:播放音频

  • sox −d new-file.wavrec new-file.wav:录制

  • play foo.wav trim 10.0 5.0play foo.wav trim 10.0 =15.0:播放 foo.wav 文件中 10-15s 之间的音频片段

  • sox Faded.wav Faded.mp3:将 Faded.wav 文件的格式由 wav 转为 mp3

  • sox −r 48k −e float −b 32 −c 2 input.raw output.wav:将某个特定的 raw 格式的音频文件转换为 wav 格式

    -e参数在这种场景下指的是raw文件的,编码

  • sox Faded.wav Faded.raw:将音频文件 Faded.wav 转为 raw 格式

  • play -r 44800 -b 16 -e signed-integer -c 2 Faded.raw:播放 raw 格式的音频文件

    1play -r 48k -e signed-integer -b 16 -c 2 music.raw  #这么播放mp3没问题
    2play -r 48k -e unsigned-integer -b 16 -c 2 music.raw #换一种编码耳朵炸了
    
  • sox Faded.wav -c 1 Faded-mono.wav:将 Faded.wav 文件转换成单声(-c 1)后输出

音频效果

SoX 工具可以在音频处理的过程中,对输入的音频数据应用众多的效果

sox --help-effect all:查看所有效果的帮助信息

1.更改声道数

  • sox foo.wav foostereo.wav channels 2sox foo.wav -c 2 foostereo.wav:将单声道音频转换成双声道

    上述命令并没有创建一个“真实”的双声道音频,而是将单声道音频复制成完全一致的两个声道再合并到输出文件中。

  • sox -M left.wav right.wav stereo.wav:通过 sox 命令的 -M 选项将左右两个声道的单声道音频合并成一个双声道文件

  • sox original.wav mono.wav channels 1sox original.wav -c 1 mono.wav:通过对双声道文件中两个声道的均一化处理,将其输出为单声道音频

  • sox stereo.wav left.wav remix 1提取双声道音频文件中单个声道的数据并作为单声道音频输出(提取左声道音频)

  • sox stereo.wav left.wav remix 2提取双声道音频文件中单个声道的数据并作为单声道音频输出(提取右声道音频)

  • sox stereo.wav mono.wav remix 1,2sox stereo.wav mono.wav remix 1-2融合双声道文件中两个声道的音频数据并作为单声道音频输出

  • sox -M stereo1.wav stereo2.wav output.wav remix 1,3 2,4:使用 -M 选项将两个双声道音频合并,再通过 remix 将合并得到的四个声道两两融合,生成一个只包含两个声道的输出文件。

2.改变音量

  • sox -v 0.5 foo.wav bar.wav-v 选项可以用来(成倍地)改变音量的大小, 将 foo.wav 音频放大 0.5 倍音量后输出至 bar.wav 文件

  • 1$ sox foo.wav -n stat -v 2> vc
    2$ sox -v `cat vc` foo.wav foo-maxed.wav
    

    sox foo.wav -n stat -v 命令返回的数字作为放大倍数,将最大化 foo.wav 的音量而不至于出现削波

  • sox --norm=-1 <inputfile> <outputfile>:选项 --norm 用来归一化音频响度。为了最大化音频的声音强度,可以在处理输入音频时将该选项设置为 -1

3.提取文件的某个部分

  • sox Input.wav Half1.wav trim 0 30:00:截取输入文件中前 30 分钟的音频

  • sox Input.wav Half2.wav trim 30:00 30:00:截取输入文件中从第 30 分钟开始到第 60 分钟的音频

    trim 接收两个参数,一个作为裁剪片段的起始位置,另一个作为该片段持续的时间。 可以使用整数+s格式的参数以样本个数作为计量单位,也可以直接使用 ((hh:)mm:)ss(.fs) 形式的时间参数。当参数为纯整数时,单位为秒。

4.拼接文件

sox Half1.wav Half2.wav Full.wav:将 Half1.wavHalf2.wav 合并至 Full.wav 文件。

注意合并前的音频文件需保持一致的类型和采样率等

5.合成音频

sox -n sine.wav synth 1.0 sine 1000.0:合成频率为 1000 Hz 长度为 1 秒的正弦波,保存至 sine.wav 文件中。

synth 支持合成的声音类型包括 sinesquaretrianglesawtoothtrapetz (trapezoidal)exp (exponential)whitenoisepinknoisebrownnoise

6.静音效果

创建静音状态的音频片段,使用 -n 选项表示没有输入,通过 trim 效果指定需要静音的片段。

sox -n -r 48000 silence.wav trim 0.0 0.250:在 slience.wav 文件中创建一段长度为 250ms 采样率为 48000Hz 的静音片段。

7.混合音频

  • sox -m sine100.wav sine250.wav sine100-250.wav:将 sine100.wavsine250.wav 两个音频文件融合以后作为 sine100-250.wav 文件的音频数据。
  • sox -m -v0.5 music.mp3 -v2 speech.wav presentation.wav:将背景音乐(music.mp3)音量降低一半后与放大 2 倍音量的人声数据(speech.wav)融合。
  • play -m -v0.5 music.mp3 -v2 speech.wav:如果不确定融合效果,可以先通过 play 命令使用相同的参数对结果进行“预览”

与前面的 -M 选项不同,-m 选项倾向于对声道数据的混合,即两个单声道文件通过 -m 混合以后输出仍是单声道数据。输出文件中的单个声道包含了输入的两个声道的特征。

-M 选项更倾向于对音频文件的合并,默认不对声道数据进行混合。所以两个单声道文件通过 -M 合并以后默认输出双声道音频。输出文件中的两个声道分别对应于输入的两个声道(数据没有混合)。除非通过 -c 选项手动指定输出文件的声道数量。

8.改变播放速度

  • play Faded.wav stretch 0.5:以 2x 倍速播放 Faded.wav 文件,stretch同时不会导致音高的变化。

  • play Faded.wav speed 2:通过 speed 效果调节播放速度(相应地音高也会发生变化)

    这样就可以创建网络上的鬼畜音效了。

  • play Faded.wav pitch 200:使用 pitch 效果调节音频片段的音高,以音分 (cents)为单位。将 Faded.wav 文件中的音频提高 200 音分,即提高 2 个半音的音程(每一个半音的音程等于 100 音分)。

问题处理

sox使用时经常不支持一些格式,需要另外下载安装:

  1. play FAIL formats: no handler for file extension `mp3'

    解决: sudo apt-get install libsox-fmt-mp3

  2. armnb,armwb不支持

    解决:https://blog.csdn.net/weixin_39573512/article/details/111802538

场景

要求可以处理裸文件,带头的文件,wav(pcm,pcma,pcmu),vox, amrnb, amrwb互转。

文件信息:

 1$soxi music.mp3 
 2
 3Input File     : 'music.mp3'
 4Channels       : 2
 5Sample Rate    : 48000
 6Precision      : 16-bit
 7Duration       : 00:05:28.20 = 15753600 samples ~ 24615 CDDA sectors
 8File Size      : 8.02M
 9Bit Rate       : 195k
10Sample Encoding: MPEG audio (layer I, II or III)
11Comments       : 
12Title=ノアール
13Artist=傘村トータ/小春六花
14Album=ノアール
15Tracknumber=1
16Discnumber=01
  1. 转PCM:
 1sox music.mp3 pcm.wav
 2
 3$soxi pcm.wav 
 4
 5Input File     : 'pcm.wav'
 6Channels       : 2
 7Sample Rate    : 48000
 8Precision      : 16-bit
 9Duration       : 00:05:28.18 = 15752448 samples ~ 24613.2 CDDA sectors
10File Size      : 63.0M
11Bit Rate       : 1.54M
12Sample Encoding: 16-bit Signed Integer PCM
  1. 转PCMU:
 1$sox music.mp3 -e mu-law mulaw.wav
 2sox WARN dither: dither clipped 5 samples; decrease volume?
 3
 4$soxi mulaw.wav 
 5
 6Input File     : 'mulaw.wav'
 7Channels       : 2
 8Sample Rate    : 48000
 9Precision      : 14-bit
10Duration       : 00:05:28.18 = 15752448 samples ~ 24613.2 CDDA sectors
11File Size      : 31.5M
12Bit Rate       : 768k
13Sample Encoding: 8-bit u-law
  1. 转PCMA:
 1$sox music.mp3 -e a-law alaw.wav
 2sox WARN dither: dither clipped 4 samples; decrease volume?
 3
 4$soxi alaw.wav 
 5
 6Input File     : 'alaw.wav'
 7Channels       : 2
 8Sample Rate    : 48000
 9Precision      : 13-bit
10Duration       : 00:05:28.18 = 15752448 samples ~ 24613.2 CDDA sectors
11File Size      : 31.5M
12Bit Rate       : 768k
13Sample Encoding: 8-bit A-law
14
  1. 转vox

    vox应该是规范的问题,采样率只能8k最大,声道数只能是1,且指定不了采样大小。

 1$sox music.mp3 -r 8k -c 1 vox.vox
 2
 3$play vox.vox 
 4play WARN alsa: can't encode 0-bit Unknown or not applicable
 5play WARN raw: `vox.vox': sample rate not specified; trying 8kHz
 6
 7vox.vox:
 8
 9 File Size: 1.31M     Bit Rate: 32.0k
10  Encoding: OKI ADPCM     
11  Channels: 1 @ 12-bit   
12Samplerate: 8000Hz       
13Replaygain: off         
14  Duration: 00:05:28.18  
15
16In:4.99% 00:00:16.38 [00:05:11.79] Out:131k  [   -==|==-   ]        Clip:0    
17Aborted.