Audio

sox 在兩個管道之間重新採樣語音音頻

  • November 5, 2021

我正在嘗試將“sox”實用程序放在兩個管道命令中,以將單聲道 44kHz 音頻文件重新採樣為 16kHz 音頻文件。

它適用於單個管道:

$ speexdec toto.oga - | sox -V -t raw -b 16 -e signed -c 1 -r 44.1k - -r 16k toto.wav

但是當我添加另一個管道時, sox 實用程序抱怨:

$ speexdec toto.oga - | sox -V -t raw -b 16 -e signed -c 1 -r 44.1k - -r 16k - | cat - > toto.wav
sox FAIL formats: can't determine type of `-'

任何的想法 ?

您需要通過-t wav在 second 之前添加來聲明 sox 輸出的類型-

當它是文件名時,sox 會窺視名稱並從中推斷出類型,但當它是標準輸出時,需要聲明類型。

您可能還想聲明所有其他設置 ( -b 16 -e signed -c 1) 而不是假設它們是從輸入中傳輸的;-都在提名輸出的最後一個之前。

當您給出明確的文件名時,例如toto.wav,SoX 將從.wav副檔名中推斷出它應該使用 WAV 格式。如果-是輸出“文件名”,則無法進行推演,因此您必須使用-t wav. 如果您想給文件一個不同的副檔名 ( toto.sound) 或根本沒有( ),這同樣適用toto

在不相關的註釋中,WAV 文件將包含的音頻的長度儲存在文件的開頭。在您的情況下,當文件的該部分寫入管道時,最終長度是未知的;因此,將寫入指示“未知長度”的值。這可能是也可能不是問題,具體取決於您要對文件執行的操作。

引用自:https://unix.stackexchange.com/questions/274166