2016-03-02 101 views
1

我目前正在編寫一個小腳本,將MP4轉換爲Opus音頻,並將其發送到golang的Discord。最初,我的腳本會通過一個MP4,因爲它通過stdin下載到ffmpeg,然後將stdout傳遞到Opus編碼器,然後傳遞到Discord(完全像this)。在學習之後,我可以用Opus創建ffmpeg,我想剪掉我以前的opus編碼器,並將ffmpeg的輸出直接傳遞給Discord。不輸出Opus原始音頻

以前,我的ffmpeg的命令看起來像這樣(用第二OPUS編碼器)現在

ffmpeg -i - -f s16le -ar 48000 -ac 2 pipe:1 

,無編碼器,讓ffmpeg的完成所有的工作,這是我想出如此遠。

ffmpeg -i - -f s16le -ar 48000 -ac 2 -acodec libopus -b:a 192k -vbr on -compression_level 10 pipe:1 

使用此命令,不過聲音沒有得到通過不和諧的服務器所接受,這意味着我懷疑鉅著音頻不出來的另一端。沒有錯誤輸出。我有沒有做過錯誤的ffmpeg可能造成這種情況?

回答

1

嘗試

ffmpeg -i - -sample_fmt s16 -ar 48000 -ac 2 -acodec libopus -b:a 192k -vbr on -compression_level 10 -f opus pipe:1 

不能使用-f s16le作爲指定的未壓縮輸出格式(特定樣品類型),而你需要一定的編解碼器的壓縮數據流。相反,你可以使用sample_fmt-f opus

+0

嘗試更詳細的答案 – kwarunek

+0

@Mulvya這肯定會輸出一個opog文件在一個ogg容器中,謝謝!雖然它可能輸出沒有ogg容器的原始opus編碼數據? – Dustin

+0

你可以試試'-map 0:a -f data pipe:1' – Mulvya