В Linux вы можете сделать что-то вроде этого:
(bash)
ffmpeg -i foo.mp3 -f wav - | opusenc --bitrate 64 - bar.opus
Это удобно, поскольку означает, что вам не нужно записывать данные WAV на диск перед передачей их в Opus, поэтому кодирование происходит «на лету» в памяти.
У меня установлены оба ffmpeg
в opusenc
Windows, и поскольку в Powershell есть каналы, я ожидал, что смогу сделать что-то подобное, поэтому я пробую это:
(PS)
> ffmpeg -y -i .\foo.mp3 -f wav - | .\opusenc.exe --bitrate 64 - bar.opus
Чего я ожидаю: ffmpeg должен передавать wav-аудио напрямую в opusenc для кодирования.
Что происходит вместо этого: кажется,толькозапустить ffmpeg без передачи данных в opusenc, о чем свидетельствует постоянный рост оперативной памяти процесса PS и отсутствие выходных данных от opusenc.
решение1
Используйте обычный cmd.exe
вместо Powershell. Точно такая же команда работает в cmd, но не в PS:
> ffmpeg -y -i .\foo.mp3 -f wav - | .\opusenc.exe --bitrate 64 - bar.opus