使用 FFMPEG 转换为 WAV 以将其传输到 LAME 中?

使用 FFMPEG 转换为 WAV 以将其传输到 LAME 中?

我正在尝试将 AAC 文件转换为 WAV,以便将输出通过管道传输到 LAME 中。我正在寻求这样做,具体来说:

find . -maxdepth 1 -type f -iname "*.m4a" | sort | while read file; do
    ffmpeg -i "$file" -acodec pcm_s16le -ac 2 - | lame -b 256 -m s -q 0 - output.mp3
done

我收到以下错误:

Unable to find a suitable output format for 'pipe:'
Warning: unsupported audio format

有没有办法指定-acodec输出?现在阅读联机帮助页。

我知道我可以在 FFMPEG 中转换为 MP3,但这不是我想要做的;)

答案1

感谢来自的提示米亚蒂的回答, 我想到了:

ffmpeg -i file.m4a -f wav -acodec pcm_s16le -ac 2 - | \
    lame -m s -b 320 -q 0 --replaygain-accurate - file.mp3

输出到stdout时需要设置格式。

答案2

这是一个常见错误,FFmpeg 对 stdin 贪婪。如果您要在读取循环中运行 FFmpeg,则需要将其关闭

ffmpeg -nostdin

例子

答案3

当你跑步时会发生什么?

ffmpeg -i file.m4a -acodec pcm_s16le -ac 2 file.wav

它对我来说效果很好。

如果出错,则前面的错误是有道理的,您可能不支持解码 aac 或编码 wav。然后管道失败,因为它不知道将其格式化为什么。
此时可能的解决方案是编译支持格式的 ffmpeg (我猜是 aac,因为我相信它不是免费的)

尝试使用 -f 根据这个,当输出设置为stdout(或-)时,必须手动设置容器格式。该帖子说使用 matroska (或 .mkv 容器)

ffmpeg -i file.m4a -acodec pcm_s16le -f matroska -ac 2 -

相关内容