我有一个YouTube链接列表,我只想下载声音文件(一个专辑列表,然后我将变成.wav文件来分析)。我一直在使用Pytube,但是它非常慢,我希望找到一种可能在文件实际下载或处理之前压缩文件的方法,以便它能够更快地提供文件。下面是我使用的代码:
from pytube import YouTube
import time
t1 = time.time()
myAudioStream = YouTube("https://www.youtube.com/watch?v=U_SLL3-NEMM").streams.last()
t2 = time.time()
print(t2-t1)
myAudioStream.download("C:\\Users\\MyUser\\Python Projects\\AlbumFiles\\")
t3 = time.time()
print(t3-t2)
目前那里的链接只是一首歌,因为我想知道它需要多长时间,而且还需要大约200秒钟。如果我想下载一些4-8倍大的东西,它可能需要很长一段时间才能完成。在处理这些数据时,我能做些什么来加快速度吗?
发布于 2019-02-10 12:18:09
有一个免费的跨平台(Windows/Mac/Linux),命令行程序名为youtube-dl,可以将YouTube视频转换为mp3文件。
显示特定YouTube URL的可用格式列表,我在下面的代码行中用<URL>
表示了该列表。
youtube-dl -F <URL>
某些特定YouTube URL的可用格式仅为音频格式,在youtube-dl -F <URL>
的结果中它们被标识为audio only
。
youtube-dl可以使用以下命令将YouTube视频转换为mp3文件:
youtube-dl -f your-choice-of-format --extract-audio --audio-format mp3 <URL>
其中,your-choice-of-format
被从youtube-dl -F <URL>
结果中选择的格式整数替换。
在执行上述命令之前,必须先下载YouTube视频,因为youtube-dl无法将视频转换为mp3格式,除非它能够访问它,所以youtube-dl将整个视频作为临时文件下载,然后在完成转换时自动删除该临时文件。
可以在安装了Python的任何操作系统上安装以下命令:
python3 -m pip install youtube-dl
除了将YouTube视频转换为mp3文件之外,youtube-dl还提供了一系列惊人的功能,包括下载播放列表和频道,从文本文件中的URL列表下载多个视频,以及通过指定要从播放列表下载的一批视频的开始NUMBER
和结束NUMBER
来下载部分播放列表或频道,如下所示:
youtube-dl -f FORMAT -ci --playlist-start NUMBER --playlist-end NUMBER <URL-of-playlist>
如果你已经买了一张CD,并在YouTube上找到了这首歌的音乐视频,你还可以用youtube-dl做点什么。您可以下载音乐视频,删除它的音频轨道,并替换它从您自己的CD高清晰度音频轨道。
发布于 2019-02-10 14:49:41
所以我想报告一下上面帖子的结果。我知道这可能属于注释,但我尝试了一些不同的方法,并希望提供代码。我观察了人们过去打电话给youtube-dl的不同方式,并比较了速度。
所以在我所有的方法中,我使用youtube-dl,因为它比Pytube快得多。我不知道是什么让Pytube变慢了,但是如果有人想评论一个解释,我很感兴趣!
First method:使用os.system播放命令行
import os
os.system('youtube-dl --extract-audio --audio-format mp3 https://www.youtube.com/watch?v=U_SLL3-NEMM')
结果:30秒左右,产生MP3。
第二种方法:将youtube-dl作为库嵌入
import youtube-dl as ydl
with youtube_dl.YoutubeDL({}) as ydl:
ydl.download(['https://www.youtube.com/watch?v=U_SLL3-NEMM'])
结果:大约10秒,并产生了一个MKV文件(比MP3更大的存储空间)
第三种方法:使用子进程运行命令行
from subprocess import call
command = "youtube-dl --extract-audio --audio-format mp3 https://www.youtube.com/watch?v=U_SLL3-NEMM"
call(command.split(), shell=False)
结果:与os的第一种方法相似;30秒,输出为MP3。
编辑:我找到了一种将最快的方法(嵌入youtube-dl)输出为wav、mp3或其他任何东西的方法(在我的例子中,是.wav)。Here is where I found it。它编辑导入的一些初始设置,最终更改输出文件。对不起,如果这一切对你们中的一些人来说都是显而易见的话!只是为其他新程序员解释一下这件事。
https://stackoverflow.com/questions/54616204
复制相似问题