youtube-dl不接受播放列表网址

时间:2017-09-04 22:09:25

标签: python youtube youtube-dl

使用此代码

import os

with open('urls.txt') as f:
    for line in f:
            os.system("youtube-dl "+"--write-thumbnail "+"--skip-download "+"--yes-playlist " +line)

播放列表中的第一张图片下载,然后我收到一条错误消息,上面写着' list'不被识别为内部或外部命令,可操作程序或批处理文件。在' urls.txt'我只有一个Youtube播放列表的网址。网址是这样的:

https://www.youtube.com/watch?v=GA3St3Rf9Gs&list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm

在& amp;&;符号。如果我更换' list'在' foo'的网址中我收到同样的消息。如何让youtube-dl接受播放列表网址?

3 个答案:

答案 0 :(得分:0)

您可以直接在脚本中使用youtube_dl库并传递要从中下载的网址。

import os
import youtube_dl

ydl_opts = {
    'writethumbnail': True,
    'skip_download': True,
    'noplaylist': False
}


with open('urls.txt') as f:
    sources = f.readlines()

with youtube_dl.YoutubeDL(ydl_opts) as ydl:    
    ydl.download(sources)

答案 1 :(得分:0)

您的计划有一个专业command injection security vulnerability。你偶然触发了这个(无害的代码)。你正在执行

youtube-dl --write-thumbnail --skip-download --yes-playlist \
https://www.youtube.com/watch?v=GA3St3Rf9Gs&list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm

由于&符是command character in shell scripts,您正在运行两个命令

youtube-dl --write-thumbnail --skip-download --yes-playlist \
    https://www.youtube.com/watch?v=GA3St3Rf9Gs

list=PL-uc0GihCvU9s24BT_mvTzt3zm7e2uDGm

由于没有具有该名称的程序,第二个命令可能会失败。

要解决此问题,请使用subprocess正确的子进程调用:

import subprocess

with open('urls.txt') as f:
    for line in f:
        subprocess.check_call([
            "youtube-dl",
            "--write-thumbnail", "--skip-download", "--yes-playlist",
            line])

答案 2 :(得分:0)

在commandprompt中,您只需要引用url(带有&符号)。您可以尝试在python中以相同的方式转义URL(带有&符号)。请参阅youtube-dl FAQ