ffmpeg 0.5 flv到wav转换会创建其他程序无法打开的wav文件

时间:2010-04-05 21:17:38

标签: ffmpeg flv wav

我正在使用以下命令将FLV文件转换为音频文件以提供给julian,一个语音到文本程序。

cat  ./jon2.flv | ffmpeg -i - -vn -acodec pcm_s16le -ar 16000 -ac 1 -f wav - | cat - > jon2.wav

cat用于调试目的,因为最终用途将是一个正在运行的程序,它将FLV传输到ffmpeg的stdin,而stdout将传递给julian。

生成的wave文件由“file”标识为:

jon3.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 16 bit, mono 16000 Hz

VLC(基于ffmpeg)播放文件,但没有其他工具可以打开/查看数据。它们显示空的wav文件或不会打开/播放。例如来自CS4的Sound Booth。

还有其他人有过类似的问题吗? Julian要求16位单声道16位单声道的wav文件。 Julian似乎确实阅读了该文件,但似乎没有浏览整个文件(可能是无关的)。

谢谢,

-rr

2 个答案:

答案 0 :(得分:2)

尝试让ffmpeg直接对输入/输出文件进行操作,而不是将数据输入和输出ffmpeg:

ffmpeg -i INPUT_FILE.FLV -vn -acodec pcm_s16le -ar 16000 -ac 1 -f wav OUTPUT_FILE.WAV

问题可能是因为你正在为一个流提供ffmpeg,并要求它写一个流,它要么不知道输入流的长度,要么更有可能,它不能返回并重写长度数据。输出文件的标题。

答案 1 :(得分:0)

问题很可能是,对于RIFF,字节4到7是存储文件长度(字节)的位置,在写入时,它还不知道。 VLC可能会忽略RIFF标题中的值,允许它在那里播放,但不能在其他地方播放。

我找到的唯一解决方案是修改目标以忽略RIFF标题的长度。

Wave File Header的结构如下所述:   http://www.sonicspot.com/guide/wavefiles.html