gpt4 book ai didi

ffmpeg 生成的 .wav 使用 scipy.io.wav 文件仅读取零

转载 作者:行者123 更新时间:2023-12-02 01:18:44 27 4
gpt4 key购买 nike

大家好,感谢您的阅读。

我想使用 Python 的 scipy.io.wavfile 对一首歌进行一些分析。由于我只有 .mp3 格式的歌曲,因此我使用 ffmpeg 将文件转换为 .wav,方法如下:

ffmpeg -i test.mp3 test.wav

.wav 文件与 vlc 播放器完美播放,但 wav 文件在读取时仅显示零:

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模块获取数据,效果相同(只有零)。我使用的是 64 位版本的 ffmpeg (ffmpeg-20140218-git-61d5970-win64-static)。

感谢任何帮助:-)

编辑:包含 .wav header 并尝试强制 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.

最佳答案

我也遇到了同样的问题。这似乎是 FFmpeg 中的一个错误,于 2011 年 10 月引入,并于 2014 年 4 月 29 日修复(5e7d21c7ad02e37caa1bcb50ab8ad64e7d7fb86c)。比 2.3(2014 年 7 月 16 日)更新的 FFmpeg 版本应该写入 numpy 可以毫无错误地读取的 WAV。

关于ffmpeg 生成的 .wav 使用 scipy.io.wav 文件仅读取零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26973363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com