【问题标题】:youtube_dl get audio link with Pythonyoutube_dl 使用 Python 获取音频链接
【发布时间】:2018-03-13 14:48:50
【问题描述】:

我正在尝试使用 youtube_dl 检索 youtube 上仅音频文件的链接。我想知道是否有可能这样做。我在 python 代码中使用 youtube_dl,而不是终端。

非常感谢

【问题讨论】:

  • 通常没有单独的音频文件。 youtube-dl 使用ffmpeg 从视频中提取音频。
  • Youtube-dl 将仅提供音频(如果可用)。 -F 标志将指示可用的格式。
  • @Alan OP 不想使用终端,所以 -F 标志没有用。他在谈论使用python库youtube_dl
  • 是的,意识到这一点;该评论正在纠正 Blender 的错误信息以供将来参考。
  • @Alan:我想我没有把第二部分说得好。我并不是要暗示它总是从视频文件中提取它,我只是很少遇到不只是从视频流中提取音频的 YouTube 链接。

标签: python youtube-dl


【解决方案1】:

如果你只想下载音频,你可以这样做,

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

【讨论】:

  • 建议您添加官方文档链接以便后续跟进:github.com/rg3/youtube-dl/blob/master/…
  • 嗯,有没有办法在不实际下载的情况下检索仅音频链接的 url?
  • @ShiroGuo 不是我的头顶。您必须参考 API 文档。根据我的理解,youtube HTML 实际上包含链接,我想 youtube_dl 只是抓取该 HTML 中的链接。您可以通过访问 youtube 页面、查看源代码并搜索“googlevideo”来尝试此操作。 HTML 将所有数据存储在 JSON 中。
  • @francium 作为 youtube-dl 的长期首席开发人员,我只能说我希望它非常简单 ;)。还要记住 youtube-dl supports a lot more websites than just YouTube。甚至 YouTube 也有十几种不同的格式(搜索、播放列表、频道、获利视频、直播、受限视频……)。
  • 我通过查看源代码弄清楚了。对于任何感兴趣的人,任何低于 10 的值都意味着 VBR 编码
【解决方案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。但是,如果您更改以下任何内容,则无法保证此 URL 可以正常工作:

  • 使用 URL 的 IP 地址(换句话说,如果您将此 URL 转移到另一台机器并尝试从那里下载,它将无法正常工作)。
  • HTTP 标头(用户代理等)。可以在格式字典的http_headers 键中找到。
  • cookies(可以在ydl.cookiejar中找到)。

必须满足哪些限制条件取决于视频,并且会发生突然变化。例如,目前看来,该 URL 足以容纳许多 YouTube 视频,但随着时间的推移,YouTube 肯定会阻止其他 IPv4 地址甚至某些视频的所有不同 IP 地址,或者仅阻止音乐和其他高度盈利的视频。

另请注意,您将获得的文件可能是一种奇怪的格式。例如,YouTube 过去常常发送大多数播放器无法读取的无效 m4a 文件。您经常会收到opus,它可能并非在所有地方都受支持。如果您只想要音频文件,最好让 youtube-dl 下载并转换它,如documentation 和其他答案中所述。

【讨论】:

    【解决方案3】:

    这是一个现有问题的副本: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

    【讨论】:

    • 嗯,有没有办法在不实际下载的情况下检索仅音频链接的 url?
    • 是的,自述文件中的示例也显示了,有一个链接可以将您定向到 youtube_dl/YoutubeDL.py,它会带您进入可用选项列表。我相信simulateskip_download 可能是你要找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2020-03-24
    • 2022-12-12
    相关资源
    最近更新 更多