The generated ffmpeg.wav only reads zeros with scipy.io.wavfile

Hello everyone and thanks for reading.

I wanted to do some analysis of the song using Python scipy.io.wavfile . Since I only have the song as .mp3, I converted the file to .wav using ffmpeg like this:

ffmpeg -i test.mp3 test.wav

      

The .wav file plays fine with vlc player, but the wavfile only shows zeros when read:

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))

      

I tried to get data using Python's built-in wave module before the same effect (only zeros). I am using 64 bit version of ffmpeg (ffmpeg-20140218-git -61d5970-win64-static).

Any help is appreciated :-)

Edit: Included a .wav header and tried to force the ffmpeg output format

I think the .wav file header information is included here:

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

      

If I try to specify the ffmpeg output format explicitly for the .mp3 conversion:

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

      

But in this case (formatted format) both ffmpeg and wavfile cannot read the file:

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

      

and

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.

      

+3


source to share


1 answer


I faced the same problem. It seems to be a bug in FFmpeg that was introduced in October 2011 and was fixed on April 29, 2014 (5e7d21c7ad02e37caa1bcb50ab8ad64e7d7fb86c). Versions of FFmpeg later than 2.3 (Jul 16, 2014) should write WAVs that numpy can read without error.



0


source







All Articles