Nat*_*enn 6 java audio speech-recognition ffmpeg cmusphinx
我有一大堆文件,我想在使用CMU Sphinx 4时获得认可.Sphinx需要以下格式:
我的文件类似于44100 khz,32位立体声mp3文件.我尝试使用Tritonus,然后使用更新版本JavaZoom,使用bakuzen中的代码进行转换.然而,AudioSystem.getAudioInputStream(File)
抛出一个UnsupportedAudioFileException
,我无法弄清楚为什么,所以我继续前进.
现在我正在尝试ffmpeg.该命令ffmpeg -i input.mp3 -ac 1 -ab 16 -ar 16000 output.wav
似乎应该可以解决这个问题(除了小端),但是当我用Audacity检查输出时,它仍然将其标记为"32位浮点数".我在这个网站上找到的命令也使用了-acodec pcm_s16le
,它的名字似乎是输出16位小端; 但是,Audacity仍然告诉我输出结果32 bit float
.
谁能告诉我如何将音频文件转换为CMU Sphinx 4所需的格式?
llo*_*gan 16
你真的尝试过CMU Sphinx 4中ffmpeg的输出吗?32位浮点可能是Audacity中的默认采样格式(" 编辑">"首选项">"质量").我猜它会将任何导入的文件转换为这些设置,因此它可能不会报告实际文件的参数,但可能是Audacity中的工作文件.
删除-ab 16
.这将指示编码器使用16位/秒,无论如何ffmpeg将忽略它为pcm_s16le.所以你的命令看起来像:
ffmpeg -i input.mp3 -acodec pcm_s16le -ac 1 -ar 16000 output.wav
Run Code Online (Sandbox Code Playgroud)
要转换Linux中目录中的所有mp3文件:
for f in *.mp3; do ffmpeg -i "$f" -acodec pcm_s16le -ac 1 -ar 16000 "${f%.mp3}.wav"; done
Run Code Online (Sandbox Code Playgroud)
或Windows:
for /r %i in (*) do ffmpeg -i %i -acodec pcm_s16le -ac 1 -ar 16000 %i.wav
Run Code Online (Sandbox Code Playgroud)
在Windows批处理文件中:
for /r %%i in (*.mp3) do ffmpeg -i "%%i" -acodec pcm_s16le -ac 1 -ar 16000 "%i.wav"
Run Code Online (Sandbox Code Playgroud)
你可以看到文件信息有file
,ffmpeg
,ffprobe
,mediainfo
等公用事业领域:
$ file hjl0bC.wav
hjl0bC.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz
$ ffmpeg -i hjl0bC.wav
[...]
Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 16000 Hz, mono, s16, 256 kb/s
Run Code Online (Sandbox Code Playgroud)