【问题标题】:How to use youtube-dl from a python program?如何在 python 程序中使用 youtube-dl?
【发布时间】:2013-08-05 22:39:18
【问题描述】:

我想访问以下 shell 命令的结果,

youtube-dl -g "www.youtube.com/..."

从 python 程序中将其输出 direct url 打印到文件中。这是我尝试过的:

import youtube-dl
fromurl="www.youtube.com/..."
geturl=youtube-dl.magiclyextracturlfromurl(fromurl)

这可能吗? 我试图了解源中的机制但迷路了:youtube_dl/__init__.pyyoutube_dl/youtube_DL.pyinfo_extractors ...

【问题讨论】:

标签: python youtube-dl


【解决方案1】:

用法:python3 AudioFromYtVideo.py link outputName

import os
from sys import argv

try:
    if argv[1] and argv[2]:
        pass
except:
    print("Input: python3 [programName] [url] [outputName]")    

os.system('youtube-dl -x --audio-format mp3 -o '+argv[2]+' '+argv[1])

【讨论】:

    【解决方案2】:

    不难,actually documented:

    import youtube_dl
    
    ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s.%(ext)s'})
    
    with ydl:
        result = ydl.extract_info(
            'http://www.youtube.com/watch?v=BaW_jenozKc',
            download=False # We just want to extract the info
        )
    
    if 'entries' in result:
        # Can be a playlist or a list of videos
        video = result['entries'][0]
    else:
        # Just a video
        video = result
    
    print(video)
    video_url = video['url']
    print(video_url)
    

    【讨论】:

    • 我收到此错误:import youtube_dl ImportError: No module named youtube_dl
    • 您必须安装 youtube_dl:如果您有 pip 实用程序(要安装它, sudo apt-get install python-pip ),您可以 sudo pip install youtube-dl
    • 如果您在 gentoo 上“没有名为 youtube_dl 的模块”,您可以尝试在 python 文件的开头添加“#!/usr/bin/env python2.7”。
    • 我知道这是旧的,还有其他答案,但只是为了澄清。在新版本的 youtube_dl 上进行了一些更改,而不是 video['url'] 它更改为 video['webpage_url']
    • with ydl:的目的是什么?
    【解决方案3】:

    对于简单的代码, 可能我觉得

    import os
    os.system('youtube-dl [OPTIONS] URL [URL...]')
    

    上面只是在 python 中运行命令行。

    文档Using youtube-dl on python中提到了其他 这是方法

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

    【讨论】:

      【解决方案4】:

      我想要这个

      from subprocess import call
      
      command = "youtube-dl https://www.youtube.com/watch?v=NG3WygJmiVs -c"
      call(command.split(), shell=False)
      

      【讨论】:

        【解决方案5】:

        这是一种方法。

        我们在列表中设置选项的字符串,就像我们设置命令行参数一样。在这种情况下opts=['-g', 'videoID']。然后,调用youtube_dl.main(opts)。这样,我们编写了我们的自定义 .py 模块,import youtube_dl,然后调用 main() 函数。

        【讨论】:

        • 这种工作,主函数没有返回任何东西,所以你还不能真正得到它的值。
        【解决方案6】:

        如果youtube-dl是一个终端程序,你可以使用subprocess模块来访问你想要的数据。

        查看此链接了解更多详情:Calling an external command in Python

        【讨论】:

        • 从 python 程序调用 python 程序有点可惜,不是吗?
        • 我认为youtube-dl 是一个用 Python 编写的命令行程序,从命令行调用它并没有错。如果你想弄乱源代码,请随意。
        • @Xaranke 如果您将 youtube-dl 作为模块从 python 导入,您将拥有更多的控制权。从命令行解析打印数据并不可靠。
        • 另外,我敢让你在这个 youtube-dl 命令上实际尝试使用 subprocess/os.system。在尝试传递参数时,它实际上并没有很好地工作,也没有达到预期的效果。
        猜你喜欢
        • 2015-09-27
        • 1970-01-01
        • 2017-12-05
        • 2016-06-09
        • 2020-04-18
        • 2017-08-14
        • 2014-07-06
        • 2014-05-12
        相关资源
        最近更新 更多