Page 1 of 1

Wie konvertiert man Pytube bufferIO richtig in ein Numpy-Array, das eine Sinuswelle darstellt?

Posted: 29 Dec 2024, 06:48
by Anonymous
Problem: Ich versuche, Audio von YouTube über Pytube herunterzuladen, es im Puffer zu speichern (Ich möchte das Audio nicht auf dem Laufwerk speichern) und dann Konvertieren Sie es in ein Numpy-Array, um eine rohe Audiowelle darzustellen. Nach der Konvertierung versuche ich, es wieder in Ton umzuwandeln, und statt 12 Minuten Audio aus einem Video erhalte ich 12 Sekunden statisches Rauschen. Beim Speichern des Puffers im MP4-Format scheint alles einwandfrei zu funktionieren. Ich bin ziemlich verloren und würde mich über jede Hilfe freuen.
Programm:

Code: Select all

from IPython.display import Audio
from pytube import YouTube
import numpy as np
from io import BytesIO

yt = YouTube('https://www.youtube.com/watch?v=zrqqrQmeQS4')

# getting audio stream
audioStreams = list(map(lambda streamObj: streamObj.itag, yt.streams.filter(only_audio=True)))
activeStream = yt.streams.get_by_itag(audioStreams[0])

# saving to buffer
bufferObj = BytesIO()
activeStream.stream_to_buffer(bufferObj)

# saving buffer to ndarray
bufferObj.seek(0)
points_array = np.frombuffer(bufferObj.read())

# preprocessing raw numpy data
points_array = np.round(points_array,10)
points_array[np.isinf(points_array) | np.isnan(points_array)] = 0

return Audio(points_array, rate=44.1 * 1000)