You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过管道将非WAV格式文件传入whisper.cpp进行转录?

解决whisper.cpp非WAV文件一键转录问题

问题背景

whisper.cpp仅支持处理WAV格式文件,若要将其他格式(如AMR)的音频文件通过一行命令完成格式转换与转录,之前尝试的管道命令均失败:

whisper.cpp -m ~/usr/whisper.cpp/models/ggml-large.bin < ffmpeg -i sample.amr -f wav
ffmpeg -i sample.amr -f wav pipe:1  | whisper.cpp -m ~/usr/whisper.cpp/models/ggml-large.bin

查看whisper.cpp帮助文档可知,它仅接受WAV文件路径作为输入,不支持从标准输入(stdin)或管道读取数据:

usage: whisper.cpp [options] file0.wav file1.wav ...

  -f FNAME,  --file FNAME        [       ] input WAV file path

解决方案

利用bash的进程替换功能,将ffmpeg格式转换的输出包装为临时伪文件,直接传递给whisper.cpp的文件参数。执行以下命令:

whisper.cpp -m ~/usr/whisper.cpp/models/ggml-large.bin -f <(ffmpeg -i sample.amr -f wav -acodec pcm_s16le -ar 16000 -ac 1 -)

命令细节说明

  • ffmpeg -i sample.amr -f wav -acodec pcm_s16le -ar 16000 -ac 1 -:将AMR文件转成whisper.cpp要求的标准WAV格式(16kHz采样率、16位单声道PCM编码),输出到标准输出
  • <(...):bash进程替换特性,把ffmpeg的输出伪装成一个可读的伪文件路径(如/dev/fd/63),让whisper.cpp可以直接读取
  • whisper.cpp通过-f参数指定该伪文件路径,实现格式转换+转录的一键执行

替代方案(临时文件方式)

若进程替换无法使用,可先生成临时WAV文件完成转录,最后清理临时文件:

ffmpeg -i sample.amr -f wav -acodec pcm_s16le -ar 16000 -ac 1 temp.wav && whisper.cpp -m ~/usr/whisper.cpp/models/ggml-large.bin -f temp.wav && rm temp.wav

内容的提问来源于stack exchange,提问作者d-b

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 20:22:06