使用 python 脚本中的 youtube-dl 只从 youtube 视频下载音频

在 YouTube 上的 下载音频上有一个使用 youtube-dl很少 职位,但是没有一个是具体的或者太有帮助的。我想知道从 Python 脚本中实现它的最佳方法是什么。

例如,下面是下载视频的 README 示例:

import youtube_dl


ydl_opts = {}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])

显然,如果你只关心音频,你不会愿意下载整个视频..。

因此,Youtube-dl源不是很有帮助

对如何编写这个脚本有什么建议吗?

117815 次浏览

请继续阅读 开发人员说明书中的一个修正例子:

from __future__ import unicode_literals
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(['http://www.youtube.com/watch?v=BaW_jenozKc'])

如果可能/支持,这将下载一个音频文件。如果文件还不是 mp3,则使用 FmpegAvconv将下载的文件转换为 mp3。有关更多信息,请参考 youtube-dl 当前版本中的 formatpostprocessors文档条目。

使用 postprocessors参数。所有可用后处理器的列表可以找到 给你

如果您想传递额外的 ffmpegavconv选项,这些选项不包含在 youtube-dl库中(如 ffmpeg中的音频比特率 --ar <BR>) ,请将 postprocessor_args作为列表添加。

您也可以选择 ffmpeg超过 avconv设置 prefer_ffmpegTrue

并保持原始和转换音频文件设置为 'keepvideo'True

例如:

from __future__ import unicode_literals
import youtube_dl


ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'wav',
'preferredquality': '192'
}],
'postprocessor_args': [
'-ar', '16000'
],
'prefer_ffmpeg': True,
'keepvideo': True
}


with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(['http://www.youtube.com/watch?v=BaW_jenozKc'])

所有可用选项的列表都在 文件中。您可以读取 ffmpeg 后处理程序的代码 给你

一个不那么复杂的例子是他们的 GitHub 自述

当 youtube _ dl 停用时,可以使用 tube _ dl

用法:

pip install tube_dl
from tube_dl import Youtube

在您的情况下,这里是如何只获得音频。

from tube_dl import Youtube
youtube('Your URL').formats.filter(only_audio=True)[0]**.download(convert='mp3')

你可以使用你最喜欢的品质,而不是0。 只要输入:

print(youtube('Your URL').formats.filter(only_audio=True))

这将打印所有支持的音频。然后指定您选择的索引和下载

编辑:

不推荐使用 filter,而应使用 filter_by

我并不打算回答这个问题,事实上,我是来为自己寻找答案的。在我的研究中,没有一个答案是令人满意的。不过,我确实找到了一个非常好的替代品,它对我非常有用,我觉得我应该分享它: 模块 pytube。

from pytube import YouTube
import os


yt = YouTube('YOUR LINK HERE')


video = yt.streams.filter(only_audio=True).first()


out_file = video.download(output_path=".")


base, ext = os.path.splitext(out_file)
new_file = base + '.mp3'
os.rename(out_file, new_file)