2

我有一个 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 倍大的东西,可能需要很长时间才能完成。在处理这些数据以加快速度时,我能做些什么吗?

4

2 回答 2

5

有一个免费的跨平台 (Windows/Mac/Linux) 命令行程序,名为 youtube-dl,可以将 YouTube 视频转换为 mp3 文件。

<URL>显示我在以下代码行中表示的特定 YouTube URL 的可用格式列表。

youtube-dl -F <URL>

特定 YouTube URL 的一些可用格式仅为音频,它们audio onlyyoutube-dl -F <URL>.

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 将整个视频下载为临时文件,然后在完成转换后自动删除临时文件。

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 上找到了该 CD 中歌曲的音乐视频,您还可以使用 youtube-dl 做一些其他事情。您可以下载音乐视频,删除其音轨,并将其替换为您自己 CD 中的高清音轨。

于 2019-02-10T12:18:09.130 回答
2

所以我只想报告上面帖子的结果。我知道这可能属于评论,但我尝试了稍微不同的方法并想提供代码。我查看了人们用来调用youtube-dl 的不同方法并比较了速度。

所以在我所有的方法中,我都使用了 youtube-dl,因为它比 Pytube 快得多。我不确定是什么让 Pytube 这么慢,但如果有人想评论解释,我很感兴趣!

第一种方法:使用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)的方法。这是我找到它的地方。它编辑导入的一些初始设置,最终更改输出文件。对不起,如果这对你们中的一些人来说是显而易见的!只是为其他偶然发现这一点的新程序员解释。

于 2019-02-10T14:49:41.687 回答