我想:
从Youtube下载音频文件
我已经用pytube完成了,然而,它被格式化为mp4,即使我将only_audio设置为True。
然后将音频文件转换为numpy数组
有些库可以在mp3上运行,例如pydub,但不能在mp4上运行。当我尝试moviepy时,它失败了,因为没有视频,因此没有帧率。我不想下载视频,因为这将需要更长的时间。
请注意,我想要音频,而不是视频。
如何:
从youtube下载音频然后把它变成numpy数组
感谢任何帮助:)
编辑
感谢您的评论,我已经设法把mp4到mp3使用ffmpeg
然而,当我试图使用this question中的代码将其转换为numpy数组时,它看起来像这样:
def read(f, normalized=False):
"""MP3 to numpy array"""
a = pydub.AudioSegment.from_mp3(f)
y = np.array(a.get_array_of_samples())
if a.channels == 2:
y = y.reshape((-1, 2))
if normalized:
return a.frame_rate, np.float32(y) / 2**15
else:
return a.frame_rate, y
字符串
它引发了这个错误:
Traceback (most recent call last):
File "C:\Users\myname\Google Drive\Python\Projects\Music\Downloads\Music Read.py", line 63, in <module>
print(read(x,True))
......
File "C:\Users\myname\AppData\Local\Programs\Python\Python36\lib\subprocess.py", line 1017, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
型
这很奇怪,因为如下所示,路径应该可以完美地工作
for f in os.listdir(path):
if (f.endswith(".mp3")):
print(f)
x = 'C:/Users/myname/Google Drive/Python/Projects/Music/Downloads/{}'.format(f)
print(os.path.exists(x))
print(open(x))
print(read(x,True))
型
产出:
test-Copy.mp3
True
c:/users/myname/google drive/python/projects/music/downloads/test-copy.mp3
<_io.TextIOWrapper name='c:/users/myname/google drive/python/projects/music/downloads/test-copy.mp3' mode='r' encoding='cp1252'>
型
此外,当我输入一个实际上不存在的文件路径时,它会输出一个不同的错误:
......
File "C:\Users\myname\AppData\Local\Programs\Python\Python36\lib\site-packages\pydub\utils.py", line 57, in _fd_or_path_or_tempfile
fd = open(fd, mode=mode)
FileNotFoundError: [Errno 2] No such file or directory: 'c:/users/myname/google drive/python/projects/music/downloads/hi'
型
如何使用来自this question的代码将mp3转换为numpy数组,如果我不能,还能怎么做?
顺便说一句,我在Win10上运行Python 3.6
我真的希望我已经说得够清楚了,再次感谢你的任何建议:)
1条答案
按热度按时间wgmfuz8q1#
这是一个奇怪的回答我自己的问题,但:
我通过使用以下代码解决了pydub问题:
字符串