需要更快地将 YouTube link 转换为声音文件

Need to turn YouTube link into sound file more quickly

我有一个 YouTube link 列表,我只想下载声音文件(一个专辑列表,然后我将把它转换成 .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)

里面的link目前只有一首歌,因为我想知道要花多长时间,现在还需要200秒左右。如果我想下载 4-8 倍大的东西,可能需要很长时间才能完成。在处理这些数据时我可以做些什么来加快速度?

有一个名为 youtube-dl 的免费跨平台 (Windows/Mac/Linux) 命令行程序,可以将 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 下载整个视频作为一个临时文件,然后在完成转换后自动删除临时文件。

youtube-dl 可以安装在使用此命令安装 Python 的任何 OS 上:

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 中的高清音轨。

所以我只想报告上面post的结果。我知道这可能属于评论,但我尝试了稍微不同的方法并想提供代码。我查看了人们用来 调用 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存储量space)

第三种方法:运行带子进程的命令行

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