ffmpeg生成的.wav只用scipy.io.wavfile读取零

时间:2014-11-17 13:04:24

标签: ffmpeg scipy wav

大家好,感谢您的阅读。

我想用Python的 scipy.io.wavfile 对一首歌做一些分析。由于我只将歌曲设为.mp3,因此我使用 ffmpeg 将文件转换为.wav:

ffmpeg -i test.mp3 test.wav

.vav文件与vlc播放器完美配合,但wavfile在读取时只显示零:

from scipy.io import wavfile as wf

data = wf.read("test.wav")
C:\Program Files\Anaconda\lib\site-packages\scipy\io\wavfile.py:42: WavFileWarning: Unknown wave file format
  warnings.warn("Unknown wave file format", WavFileWarning)

data
(44100, array([[0, 0],
        [0, 0],
        [0, 0],
        ..., 
        [0, 0],
        [0, 0],
        [0, 0]], dtype=int16))

我尝试使用Python的内置 wave 模块获取数据之前达到相同的效果(仅为0)。 我正在使用64位版本的ffmpeg(ffmpeg-20140218-git-61d5970-win64-static)。

感谢任何帮助: - )

编辑:包含.wav标头并尝试强制ffmpeg输出格式

我想这里包含.wav文件的头信息:

ffmpeg -i .\test.wav
Guessed Channel Layout for  Input Stream #0.0 : stereo
Input #0, wav, from '.\test.wav':
  Metadata:
    artist          : Joe Cocker
    copyright       : (C) 1987 Capitol Records, Inc.
    date            : 1987
    genre           : Pop
    title           : Unchain My Heart
    album           : Unchain My Heart
    track           : 1/10
    encoder         : Lavf55.33.100
  Duration: 00:05:04.33, bitrate: 1411 kb/s
  Stream #0:0: Audio: pcm_s16le ([1][0][0][0] / 0x0001), 44100 Hz, stereo, s16, 1411 kb/s

如果我尝试为.mp3转换明确指定ffmpeg输出格式:

ffmpeg -i .\test.mp3 -f s16le -ar 44100 -ac 2 test.wav
Input #0, mp3, from '.\test.mp3':
  Metadata:
    title           : Unchain My Heart
    artist          : Joe Cocker
    album           : Unchain My Heart
    genre           : Pop
    composer        : Bobby Sharp
    track           : 1/10
    disc            : 1/1
    album_artist    : Joe Cocker
    copyright       : (C) 1987 Capitol Records, Inc.
    date            : 1987
  Duration: 00:05:04.35, start: 0.025056, bitrate: 240 kb/s
    Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 235 kb/s
    Stream #0:1: Video: mjpeg, yuvj420p(pc), 600x600 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
    Metadata:
      title           :
      comment         : Cover (front)
Output #0, s16le, to 'test.wav':
  Metadata:
    title           : Unchain My Heart
    artist          : Joe Cocker
    album           : Unchain My Heart
    genre           : Pop
    composer        : Bobby Sharp
    track           : 1/10
    disc            : 1/1
    album_artist    : Joe Cocker
    copyright       : (C) 1987 Capitol Records, Inc.
    date            : 1987
    encoder         : Lavf55.33.100
    Stream #0:0: Audio: pcm_s16le, 44100 Hz, stereo, s16, 1411 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (mp3 -> pcm_s16le)
Press [q] to stop, [?] for help
video:0kB audio:52425kB subtitle:0 data:0 global headers:0kB muxing overhead 0.000000%
size=   52425kB time=00:05:04.32 bitrate=1411.2kbits/s

但是在这种情况下(强制格式),ffmpeg和wavfile都无法读取文件:

ffmpeg -i .\test.wav
.\test.wav: Invalid data found when processing input

data = wf.read("test2.wav")
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-10-fbbd84cb966b> in <module>()
----> 1 data = wf.read("test2.wav")

C:\Program Files\Anaconda\lib\site-packages\scipy\io\wavfile.pyc in read(filename, mmap)
    152 
    153     try:
--> 154         fsize = _read_riff_chunk(fid)
    155         noc = 1
    156         bits = 8

C:\Program Files\Anaconda\lib\site-packages\scipy\io\wavfile.pyc in _read_riff_chunk(fid)
     98         _big_endian = True
     99     elif str1 != b'RIFF':
--> 100         raise ValueError("Not a WAV file.")
    101     if _big_endian:
    102         fmt = '>I'

ValueError: Not a WAV file.

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。这似乎是在2011年10月推出的FFmpeg中的一个错误,该错误已于2014年4月29日修复(5e7d21c7ad02e37caa1bcb50ab8ad64e7d7fb86c)。 FFmpeg版本比2.3(2014年7月16日)更新,应该编写numpy可以正确读取的WAV。

相关问题