在 Linux 上你可以這樣做:
(bash)
ffmpeg -i foo.mp3 -f wav - | opusenc --bitrate 64 - bar.opus
這很巧妙,因為這意味著您不必在將 WAV 資料傳遞給 opus 之前將其寫入磁碟,因此編碼會在記憶體中動態進行。
我在 Windows 上安裝了兩者ffmpeg
,opusenc
並且由於 Powershell 有管道,我希望能夠做類似的事情,所以我正在嘗試這樣做:
(PS)
> ffmpeg -y -i .\foo.mp3 -f wav - | .\opusenc.exe --bitrate 64 - bar.opus
我期望發生什麼:ffmpeg 應該將 wav 音訊直接傳輸到 opusenc 進行編碼
相反會發生什麼:似乎僅有的運行 ffmpeg 而不將資料傳遞給 opusenc,這由 PS 進程的 RAM 不斷增長且 opusenc 沒有輸出表明。
答案1
使用常規cmd.exe
而不是 Powershell。完全相同的命令在 cmd 中有效,但在 PS 中無效:
> ffmpeg -y -i .\foo.mp3 -f wav - | .\opusenc.exe --bitrate 64 - bar.opus