我正在尝试使用youtube_dl检索youtube上仅音频文件的链接。我想知道是否可以这样做。我在python代码中使用youtube_dl而不是终端。
非常感谢
答案 0 :(得分:2)
如果您只想下载音频,可以这样做,
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': '%(title)s.%(etx)s',
'quiet': False
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download([url]) # Download into the current working directory
这是我从我工作的项目中取出的一段代码。您可以在此处查看完整的来源:https://github.com/francium/audiosave/blob/master/audiosave.py
您可以在此处查看youtube_dl的API和文档:https://github.com/rg3/youtube-dl/blob/master/README.md#embedding-youtube-dl
答案 1 :(得分:2)
websites supported by youtube-dl中只有极少数人真正提供纯音频文件。但也有一些,包括YouTube上的大多数视频。对于这些,您可以请求文件类型bestaudio
并提取信息而不是下载:
from __future__ import unicode_literals
import youtube_dl
ydl_opts = {
'format': 'bestaudio',
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(
'https://www.youtube.com/watch?v=BaW_jenozKc', download=False)
print(info['formats'][0]['url'])
请注意,这会为您提供正确的网址。但是,如果您更改以下任何内容,则无法保证此URL可以正常工作:
http_headers
键中找到。ydl.cookiejar
中找到)。必须满足哪些约束取决于视频,并且可能会突然发生变化。例如,目前看来这个网址对于许多YouTube视频来说已经足够了,但是YouTube肯定会阻止其他IPv4地址甚至是某些视频的所有不同IP地址,或者只是音频和其他高度货币化的视频。
另请注意,您获得的文件可能是一种奇怪的格式。例如,YouTube用于发送大多数玩家无法读取的无效m4a文件。您经常会获得opus,这可能无法在任何地方得到支持。如果您只想要音频文件,最好让youtube-dl下载并转换它,如documentation和其他答案所述。
答案 2 :(得分:0)
这是现有问题的副本:download only audio from youtube video using youtube-dl in python script
但是,我会提供帮助并在此分享答案。使用此代码:
import youtube_dl
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['insert youtube link here'])
它应该使用ffmpeg将音频转换为mp3。有关更多示例和说明,请参阅here。