Linux中國

使用這個多功能的 Linux 命令轉換音頻文件

我工作需要使用音視頻媒體,不管你處理哪種媒體,你肯定知道標準化是一種有價值的工具。就像你不會試圖把一個分數加到一個小數上而不轉換其中一個一樣,我已經知道,把不同格式的媒體組合起來並不理想。為了方便用戶,大多數愛好者級應用程序使轉換過程不可見。然而,對於那些需要控制媒體細節的用戶的靈活軟體,會通常讓你自己提前將媒體轉換為所需的格式。我有一些最喜歡的音頻轉換工具,其中之一就是號稱「音頻的瑞士軍刀」 —— SoX

安裝

在 Linux 或 BSD 上,可以從軟體存儲庫或 Ports 樹中安裝 sox 命令(,以及一些有用的符號鏈接)。

你也可以從 Sourceforge.net 上安裝 SoX。它不經常發布,但它的代碼庫往往是穩定的,所以如果你想要最新的功能(如 Opus 支持),構建它是容易和安全的。

SoX 主要提供了 sox 命令,但是創建了一些有用的符號鏈接:playrecsoxi

使用 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 手冊頁中列出了不同類型的淡入淡出(正弦、線性、倒拋物線等)以及淡入淡出提供的選項。

特效語法

每個特效插件都有自己的語法,因此請參閱手冊頁了解如何調用每個特效插件的詳細信息。

效果可以在一個命令中以菊花鏈的方式進行,至少在你想組合它們的範圍內是如此。換句話說,沒有語法可以只在六秒鐘的淡出期間應用一個鑲邊效果。對於如此精確的東西,你需要一個圖形聲波編輯器或數字音頻工作站,例如 LMMSRosegarden。但是,如果你只想應用一次特效,可以在同一命令中將它們一起列出。

此命令應用了一個 -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.oggoutput.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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國