使用這個多功能的 Linux 命令轉換音頻文件
我工作需要使用音視頻媒體,不管你處理哪種媒體,你肯定知道標準化是一種有價值的工具。就像你不會試圖把一個分數加到一個小數上而不轉換其中一個一樣,我已經知道,把不同格式的媒體組合起來並不理想。為了方便用戶,大多數愛好者級應用程序使轉換過程不可見。然而,對於那些需要控制媒體細節的用戶的靈活軟體,會通常讓你自己提前將媒體轉換為所需的格式。我有一些最喜歡的音頻轉換工具,其中之一就是號稱「音頻的瑞士軍刀」 —— SoX。
安裝
在 Linux 或 BSD 上,可以從軟體存儲庫或 Ports 樹中安裝 sox
命令(,以及一些有用的符號鏈接)。
你也可以從 Sourceforge.net 上安裝 SoX。它不經常發布,但它的代碼庫往往是穩定的,所以如果你想要最新的功能(如 Opus 支持),構建它是容易和安全的。
SoX 主要提供了 sox
命令,但是創建了一些有用的符號鏈接:play
、rec
和 soxi
。
使用 SoX 獲取文件信息
SoX 可以讀取和重寫音頻數據。它是否存儲重寫的音頻數據取決於你。在有些情況下,你不需要存儲轉換後的數據,例如,當你將輸出直接發送到揚聲器進行回放時。然而,在進行任何轉換之前,最好首先確定要處理的是什麼。
使用 soxi
命令也可以收集音頻文件信息。soxi
會符號鏈接到 soxi --info
。
$ soxi countdown.mp3
Input File(輸入文件) : '/home/tux/countdown.mp3'
Channels(通道數) : 1
Sample Rate(採樣率) : 44100
Precision(數據精度) : 16-bit(16 比特)
Duration(時長) : 00:00:11.21 = 494185 samples...(11.21 秒 = 494185 採樣點)
File Size(文件大小) : 179k
Bit Rate(比特率) : 128k
Sample Encoding(編碼格式): MPEG audio (layer I, II or III)
這個輸出可以讓你很好地了解音頻文件的編碼方式、文件長度、文件大小、採樣率和通道數。其中一些你可能認為你已經知道了,但當客戶把媒體帶到我面前時,我從不相信這些假設。使用 soxi
驗證媒體屬性。
轉換文件
在本例中,,一個遊戲節目倒計時的音頻是以MP3文件的形式提供的。雖然幾乎所有的編輯應用程序都接受壓縮音頻,但它們並不是在壓縮的數據上進行編輯。轉換是在某個地方發生的,可能是一個秘密的後台任務,也可能提示讓你保存一份副本。我通常喜歡自己提前完成轉換。這樣,我可以控制使用的格式。我可以在夜間批量處理大量的媒體,而不是浪費寶貴的製作時間,等待編輯應用程序按需處理它們。
sox
命令用於轉換音頻文件。在 sox
流程中有幾個階段:
- 輸入
- 合併
- 特效
- 輸出
但在命令語法中,特效步驟令人困惑地放到了最後一步。這意味著 sox
流程是這樣組成的:
輸入 → 合併 → 輸出 → 特效
編碼
最簡單的轉換命令只涉及一個輸入文件和一個輸出文件。下面是轉換 MP3 文件為無損 FLAC 文件的命令:
$ sox countdown.mp3 output.flac
$ soxi output.flac
Input File(輸入文件) : 'output.flac'
Channels(通道數) : 1
Sample Rate(採樣率) : 44100
Precision(數據精度) : 16-bit(16 比特)
Duration(時長) : 00:00:11.18 = 493056 samples...(11.18 秒 = 493056 採樣點)
File Size(文件大小) : 545k
Bit Rate(比特率) : 390k
Sample Encoding(編碼格式): 16-bit FLAC
Comment(注釋) : 'Comment=Processed by SoX'
特效
特效可以在命令末尾指定。它可以在將數據發送到最終目的地之前更改音頻。例如,有時聲音太大會在轉換過程中造成問題:
$ sox bad.wav bad.ogg
sox WARN sox: `bad.ogg' output clipped 126 samples; decrease volume?
應用增益(gain
)效果通常可以解決此問題:
$ sox bad.wav bad.ogg gain -1
淡入淡出
另一個常用的效果是淡入淡出(fade
)。此效果允許你定義淡入或淡出的類型,以及你希望淡入淡出效果持續的時間。
下面是一個使用倒拋物線的 6 秒淡入示例:
$ sox intro.ogg intro.flac fade p 6
這將對音頻的頭部應用 3 秒的淡入,並從 8 秒標記開始淡出(這段音樂只有 11 秒,因此在這種情況下淡出也是 3 秒):
$ sox intro.ogg intro.flac fade p 3 8
sox
手冊頁中列出了不同類型的淡入淡出(正弦、線性、倒拋物線等)以及淡入淡出提供的選項。
特效語法
每個特效插件都有自己的語法,因此請參閱手冊頁了解如何調用每個特效插件的詳細信息。
效果可以在一個命令中以菊花鏈的方式進行,至少在你想組合它們的範圍內是如此。換句話說,沒有語法可以只在六秒鐘的淡出期間應用一個鑲邊效果。對於如此精確的東西,你需要一個圖形聲波編輯器或數字音頻工作站,例如 LMMS 或 Rosegarden。但是,如果你只想應用一次特效,可以在同一命令中將它們一起列出。
此命令應用了一個 -1 的增益效果、1.35 的節奏拉伸和淡出:
$ sox intro.ogg output.flac gain -1 stretch 1.35 fade p 0 6
$ soxi output.flac
Input File(輸入文件) : 'output.flac'
Channels(通道數) : 1
Sample Rate(採樣率) : 44100
Precision(數據精度) : 16-bit(16 比特)
Duration(時長) : 00:00:15.10 = 665808 samples...(15.10 秒 = 665808 採樣點)
File Size(文件大小) : 712k
Bit Rate(比特率) : 377k
Sample Encoding(編碼格式): 16-bit FLAC
Comment(注釋) : 'Comment=Processed by SoX'
組合音頻
SoX 還可以通過連接或混合音頻文件來組合音頻文件。
要連接(或者說拼接)文件合併為一個文件,請在命令中提供多個輸入文件:
$ sox countdown.mp3 intro.ogg output.flac
在本例中,output.flac
現在包含 countdown.mp3
音頻,緊接著是 intro.ogg
音樂。
但是,如果你希望兩首曲目同時播放,可以使用 --combine mix
選項:
$ sox --combine mix countdown.mp3 intro.ogg output.flac
然而,想像一下,這兩個輸入文件的不同之處不僅僅在於它們的編解碼器。人聲音軌用單聲道(一個聲道)錄製並不少見,但音樂至少要用立體聲(至少兩個聲道)來錄製。SoX 不會給出默認的解決方案,因此你必須首先自己標準化這兩個文件的格式。
更改音頻文件
選項與後面列出文件名有關。例如,此命令中的 --channels
選項將僅僅應用於 input.wav
,而不被應用於 example.ogg
和 output.flac:
$ sox --channels 2 input.wav example.ogg output.flac
這意味著在 SoX 中,選項的位置非常重要。如果你在命令開始時指定一個選項,那麼實際上只會覆蓋 SoX 自己從輸入文件中收集的內容。然而,在輸出文件名前的選項決定了 SoX 如何寫入音頻數據。
要解決前面的通道不兼容問題,你可以首先標準化輸入,然後混合:
$ sox countdown.mp3 --channels 2 countdown-stereo.flac gain -1
$ soxi countdown-stereo.flac
Input File(輸入文件) : 'countdown-stereo.flac'
Channels(通道數) : 2
Sample Rate(採樣率) : 44100
Precision(數據精度) : 16-bit(16 比特)
Duration(時長) : 00:00:11.18 = 493056 samples...(11.18 秒 = 493056 採樣點)
File Size(文件大小) : 545k
Bit Rate(比特率) : 390k
Sample Encoding(編碼格式): 16-bit FLAC
Comment(注釋) : 'Comment=Processed by SoX'
$ sox --combine mix
countdown-stereo.flac
intro.ogg
output.flac
SoX 絕對需要多個命令來執行複雜的操作,因此根據需要創建幾個臨時和中間文件是正常的。
多通道音頻
當然,並非所有音頻都被限制在一個或兩個聲道。如果你想將多個音頻通道組合成一個文件,可以使用 SoX 的 --combine merge
選項:
$ sox --combine merge countdown.mp3 intro.ogg output.flac
$ soxi output.flac
Input File : 'output.flac'
Channels : 3
[...]
簡單的音頻操作
在沒有視覺界面的情況下操作音頻似乎很奇怪,而且對於某些任務來說,SoX 絕對不是最好的工具。然而,對於許多任務,SoX 提供了一個簡單而輕量級的工具包。SoX 是一個具有強大潛力的簡單命令。有了它,你可以轉換音頻,操縱通道和波形,甚至生成自己的聲音。本文僅簡要概述了其功能,因此請閱讀其手冊頁或 在線文檔,然後看看你能創造什麼。
via: https://opensource.com/article/20/2/linux-sox
作者:Klaatu 選題:lujun9972 譯者:FYJNEVERFOLLOWS 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive