西皮和mlab规格图生成意外图像

2024-09-30 01:36:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试了几种不同的方法来生成视频文件的DTFT灰度PNG,但是我的结果与其他人发布的结果不太一样。我尝试用scikit image创建一个PNG,而不是使用matplotlib在屏幕上绘图(在其他项目中使用它之后,我信任它)。在

这是我的代码,它需要一个mp4文件(这里我使用的是隐藏在DTFT中的Aphex Twin's song with the notorious Demon Face)。我特别感兴趣的是使用the av library来处理这个问题,我非常确信它正确地读取了文件并生成了一个浮点数数组。在

import numpy as np
import av
import skimage.io
import scipy.signal as signal

container = av.open("tmp/aphex.mp4")
frames = container.streams.audio[0].frames
chunk = container.streams.audio[0].frame_size // 2  # bug in av?
rate = container.streams.audio[0].rate

fltp = np.zeros((frames, chunk), dtype=float)
for n, frame in enumerate(container.decode(audio=0)):
    fltp[n, :] = np.frombuffer(frame.planes[0], dtype=float)    
fltp = fltp.flatten()    
# check that it worked by playing it (just one channel)
fltp.tofile("tmp/aphex.raw")
# play -t raw -r 44100 -e floating-point -b 32 -c 1 tmp/aphex.raw

custom_chunk = 4096
freqs, times, data = signal.spectrogram(fltp,
                                        fs=rate,
                                        nperseg=custom_chunk,
                                        detrend="linear")

data = data - np.min(data)
data = data / np.max(data)
data = 1 - data    
skimage.io.imsave("tmp/aphex.png", data)

但是这会产生一个非常稀疏的图像(这是一个图像,老实说,不是一个很大的垂直空间)a very sparse image如果我添加以下几行

^{pr2}$

为了引入一个日志比例(和很多人一样),那么它看起来更奇怪looks even weirder(由于2MB上传限制而被裁剪)

我试过很多其他的方法,比如试着使每一列都正常化(这看起来稍微好一点,但还是很奇怪),但是我的光谱图看起来还是跟他们想象的不一样。在

有人知道我做错了什么吗?在

(我也试着用数字.fft.rfft/直接在每一块。。。我的照片看起来和这些照片差不多。我也试过一些不同的电影/歌曲)


Tags: importdataframessignalratecontainernpframe

热门问题