Audio
sox 在兩個管道之間重新採樣語音音頻
我正在嘗試將“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 文件將包含的音頻的長度儲存在文件的開頭。在您的情況下,當文件的該部分寫入管道時,最終長度是未知的;因此,將寫入指示“未知長度”的值。這可能是也可能不是問題,具體取決於您要對文件執行的操作。