Linux 對音頻萬能處理的命令——SOX


what's the SOX

         SoX(即 Sound eXchange)是一個跨平台(Windows,Linux,MacOS 等)的命令行實用程序,可以將各種格式的音頻文件轉換為需要的其他格式。SoX 還可以對輸入的音頻文件應用各種效果,也支持在大多數平台上播放和錄制音頻文件。
Windows下載鏈接: https://sourceforge.net/projects/sox/files/sox/

  SoX  可以讀取寫入常見格式的音頻文件,並在此過程中選擇性的加入一些聲音效果。可以組合多個輸入源及合成音效,在許多系統上也可以作為音頻播放器多軌錄音機使用。
SoX 工具在大部分 Linux 系統上都可以直接通過軟件包管理器安裝

sudo apt-get install sox # Linux
brew install sox  # Mac 系統

 

SoX 處理音頻的基本流程如下:

  Input(s) -> Combiner -> Effects -> Output(s)

SoX 工具的所有功能都可以通過一命令及相應的選項實現。它同時提供了 play 命令用於播放音頻文件,rec 命令用於錄制音頻,以及 soxi 命令用於獲取音頻的文件頭中包含的信息。

上述幾個命令的基本格式如下:

SYNOPSIS
       sox [global-options] [format-options] infile1
            [[format-options] infile2] ... [format-options] outfile
            [effect [effect-options]] ...

       play [global-options] [format-options] infile1
            [[format-options] infile2] ... [format-options]
            [effect [effect-options]] ...

       rec [global-options] [format-options] outfile
            [effect [effect-options]] ...
       
       soxi [-V[level]] [-T] [-t|-r|-c|-s|-d|-D|-b|-B|-p|-e|-a] infile1 ...

 

基本使用

一、獲取音頻元數據
  soxi 或 sox --i 命令可以通過分析音頻文件的文件頭,獲取其元數據(如通道數、采樣率、編碼等)。
soxi Faded.wav
'''
Input File     : 'Faded.wav'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:03:32.63 = 9376836 samples = 15947 CDDA sectors
File Size      : 37.5M
Bit Rate       : 1.41M
Sample Encoding: 16-bit Signed Integer PCM
'''

 

  soxi 命令支持的所有選項及其含義如下:

soxi
Usage: soxi [-V[level]] [-T] [-t|-r|-c|-s|-d|-D|-b|-B|-p|-e|-a] infile1 '''
-t  Show detected file-type
-r  Show sample-rate
-c  Show number of channels
-s  Show number of samples (0 if unavailable)
-d  Show duration in hours, minutes and seconds (0 if unavailable)
-D  Show duration in seconds (0 if unavailable)
-b  Show number of bits per sample (0 if not applicable)
-B  Show the bitrate averaged over the whole file (0 if unavailable)
-p  Show estimated sample precision in bits
-e  Show the name of the audio encoding
-a  Show file comments (annotations) if available

With no options, as much information as is available is shown for
each given file.
'''

 

  soxi 命令跟上某個特定的選項可以只獲取該選項對應的信息,如只顯示某音頻文件 Faded.wav 的比特率(Bit Rate):

soxi -B Faded.wav # 1.41M

 

二、獲取音頻的統計信息

  使用 sox <inputfile> -n stat 命令獲取某音頻文件的統計信息。示例如下:

sox Faded.wav -n stat
'''
Samples read:          18753672
Length (seconds):    212.626667
Scaled by:         2147483647.0
Maximum amplitude:     0.977417
Minimum amplitude:    -0.977478
Midline amplitude:    -0.000031
Mean    norm:          0.229415
Mean    amplitude:    -0.000006
RMS     amplitude:     0.302594
Maximum delta:         1.765564
Minimum delta:         0.000000
Mean    delta:         0.202369
RMS     delta:         0.273320
Rough   frequency:         6339
Volume adjustment:        1.023
'''
View Code

 

三、播放與錄制

  play 和 rec 命令提供了最基本的播放和錄制功能。

play existing-file.wav # 播放
rec new-file.wav # 錄制

# 上述命令等同於 sox 命令的如下形式:
sox existing-file.wav −d # 播放
sox −d new-file.wav # 錄制
# -d 選項用於指定播放或錄制時使用的音頻設備,不指定時則表示使用默認設備。 

 

  播放指定片段

# 播放 foo.wav 文件中 10-15s 之間的音頻片段
play foo.wav trim 10.0 5.0
# play foo.wav trim 10.0 =15.0

 

四、音頻格式轉換

音頻數據主要有5個屬性

  • 采樣率(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):表示一個單位時間內編碼音頻信號占用的存儲空間大小, 它的數值一般取決於所有的上述四個參數。 

  SoX 可以處理 self-describing 和 raw 格式的音頻文件。 self-describing 格式(如 WAV、FLAC、MP3)的文件包含一個用於描述信號和編碼屬性的文件頭,而 raw 或 headless 格式的音頻則不包含這些信息。 所以當 raw 格式的音頻作為輸入文件時,需要在 sox 命令的格式選項里指定其信號和編碼屬性。

常用的音頻格式選項:

選項 描述
-b, --bits BITS 每個編碼樣本占用的數據位數
-c, --channels CHANNELS 音頻文件包含的通道數
-e, --encoding ENCODING 音頻文件的編碼類型
-r, --rate RATE 音頻文件的采樣率
-t, --type FILE-TYPE 音頻文件的文件類型
sox Faded.wav Faded.mp3 # 將wav文件轉換成mp3

# 將 Faded.wav 文件轉換成單聲道后輸出
sox Faded.wav -c 1 Faded-mono.wav

#####
sox −r 48k −e float −b 32 −c 2 input.raw output.wav

 

音頻效果

  SoX 工具可以在音頻處理的過程中,對輸入的音頻數據應用眾多的效果。
可以使用如下命令查看所有效果的幫助信息:
sox --help-effect all | less
'''
sox:      SoX v

Effect usage:

allpass frequency width[h|k|q|o]


band [-n] center [width[h|k|q|o]]


bandpass [-c] frequency width[h|k|q|o]


bandreject frequency width[h|k|q|o]


bass gain [frequency(100) [width[s|h|k|q|o]](0.5s)]


bend [-f frame-rate(25)] [-o over-sample(16)] {start,cents,end}

:
'''

# 也可以直接查看具體某個音頻效果的使用方法:
sox --help-effect echo
'''
sox:      SoX v

Effect usage:

echo gain-in gain-out delay decay [ delay decay ... ]
'''
View Code

 

一、更改聲道數
  將單聲道音頻轉換成雙聲道
sox foo.wav foostereo.wav channels 2
# sox foo.wav -c 2 foostereo.wav

  但是上述命令並沒有創建一個“真實”的雙聲道音頻,而是將單聲道音頻復制成完全一致的兩個聲道再合並到輸出文件中。 可以通過 sox 命令的 -M 選項將左右兩個聲道的單聲道音頻合並成一個雙聲道文件

sox -M left.wav right.wav stereo.wav

 

  將雙聲道均一程單聲道

sox original.wav mono.wav channels 1
# sox original.wav -c 1 mono.wav

 

remix
  remix 效果也可以完成對聲道數據的提取或融合
# 提取雙聲道音頻文件中單個聲道的數據並作為單聲道音頻輸出
sox stereo.wav left.wav remix 1 # 提取左聲道音頻
sox stereo.wav right.wav remix 2 # 提取右聲道音頻

# 融合雙聲道文件中兩個聲道的音頻數據並作為單聲道音頻輸出
sox stereo.wav mono.wav remix 1,2 
# 或sox stereo.wav mono.wav remix 1-2

 

  此外,remix 還可以將輸入文件中的多個聲道數據分別進行融合。 如使用 -M 選項將兩個雙聲道音頻合並,再通過 remix 將合並得到的四個聲道兩兩融合,生成一個只包含兩個聲道的輸出文件。

sox -M stereo1.wav stereo2.wav output.wav remix 1,3 2,4

 

二、改變音量

sox -v 0.5 input.wav output.wav # 音頻放大 0.5 倍

# 以 sox foo.wav -n stat -v 命令返回的數字作為放大倍數,將最大化 foo.wav 的音量而不至於出現削波
sox foo.wav -n stat -v 2> vc
sox -v `cat vc` foo.wav foo-maxed.wav

sox --norm=-1 <inputfile> <outputfile> # 歸一化音頻響度

 

三、提取文件的某個部分

  trim 接收兩個參數,一個作為裁剪片段的起始位置,另一個作為該片段持續的時間。 可以使用整數+s格式的參數以樣本個數作為計量單位,也可以直接使用 ((hh:)mm:)ss(.fs) 形式的時間參數。當參數為純整數時,單位為秒。

sox Input.wav Half1.wav trim 0 30:00 # 截取輸入文件中前 30 分鍾的音頻
sox Input.wav Half2.wav trim 30:00 30:00 # 截取輸入文件中從第 30 分鍾開始到第 60 分鍾的音頻

 

四、拼接文件
# 注意合並前的音頻文件需保持一致的類型和采樣率等
sox Half1.wav Half2.wav Full.wav # 將 Half1.wav 和 Half2.wav 合並至 Full.wav 文件

 

五、合成音頻

  sox 命令可以通過 synth 效果合成許多標准波形和噪聲類型。

synth 支持合成的聲音類型包括:sine、square、triangle、sawtooth、trapetz (trapezoidal)、exp (exponential)、whitenoise、pinknoise 和 brownnoise 

sox -n sine.wav synth 1.0 sine 1000.0 # 合成頻率為 1000 Hz 長度為 1 秒的正弦波

 

六、靜音效果

  sox 命令可以創建靜音狀態的音頻片段,使用 -n 選項表示沒有輸入,通過 trim 效果指定需要靜音的片段。

# 在 slience.wav 文件中創建一段長度為 250ms 采樣率為 48000Hz 的靜音片段
sox -n -r 48000 silence.wav trim 0.0 0.250 

 

七、混合音頻

  sox 命令的 -m 選項可以將兩個音頻文件混合以后生成輸出文件。

  與前面的 -M 選項不同,-m 選項傾向於對聲道數據的混合,即兩個單聲道文件通過 -m 混合以后輸出仍是單聲道數據。輸出文件中的單個聲道包含了輸入的兩個聲道的特征。 而 -M 選項更傾向於對音頻文件的合並,默認不對聲道數據進行混合。所以兩個單聲道文件通過 -M 合並以后默認輸出雙聲道音頻。輸出文件中的兩個聲道分別對應於輸入的兩個聲道(數據沒有混合)。除非通過 -c 選項手動指定輸出文件的聲道數量。 

# 將 sine100.wav 和 sine250.wav 兩個音頻文件融合以后作為 sine100-250.wav 文件的音頻數據
sox -m sine100.wav sine250.wav sine100-250.wav

# 將背景音樂(music.mp3)音量降低一半后與放大 2 倍音量的人聲數據(speech.wav)融合
sox -m -v0.5 music.mp3 -v2 speech.wav presentation.wav

# 如果不確定融合效果,可以先通過 play 命令使用相同的參數對結果進行“預覽”
play -m -v0.5 music.mp3 -v2 speech.wav

 

八、改變播放速度

  可以通過 stretch 效果改變音頻文件的播放速度,同時不會導致音高的變化。

play Faded.wav stretch 0.5 # 以 2x 倍速播放 Faded.wav 文件

# 也可以通過 speed 效果調節播放速度(相應地音高也會發生變化)
play Faded.wav speed 2

# 可以使用 pitch 效果調節音頻片段的音高,以音分(cents)為單位
play Faded.wav pitch 200# 提高 2 個半音的音程(每一個半音的音程等於 100 音分)

 

 

 

 

 

參考:https://www.jianshu.com/p/be8977de4a6b

                

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM