如何将命令参数放在youtube-dl python脚本中?

时间:2018-10-05 19:58:24

标签: python youtube-dl

我通常在这样的终端上使用youtube-dl

youtube-dl -o '%(uploader)s - %(title)s.%(ext)s' URL

要使我的输出这样命名:“频道名称-title.mp4”…,它对于单个视频非常有用,但是如果我想使用此python脚本来下载Mewfree提供的字幕:

#!/usr/bin/env python3

import opml
import feedparser
import youtube_dl
import sys
from glob import glob
from pprint import pprint

if sys.version_info[0] < 3:
    raise Exception('Must be using Python 3')

from time import time, mktime, strptime
from datetime import datetime

if len(glob('last.txt')) == 0:
    f = open('last.txt', 'w')
    f.write(str(time()))
    print('Initialized a last.txt file with current timestamp.')
    f.close()

else:
    f = open('last.txt', 'r')
    content = f.read()
    f.close()

    outline = opml.parse('subs.xml')

    ptime = datetime.utcfromtimestamp(float(content))
    ftime = time()

    urls = []

    for i in range(0,len(outline[0])):
        urls.append(outline[0][i].xmlUrl)

    videos = []
    for i in range(0,len(urls)):
        print('Parsing through channel '+str(i+1)+' out of '+str(len(urls)), end='\r')
        feed = feedparser.parse(urls[i])
        for j in range(0,len(feed['items'])):
            timef = feed['items'][j]['published_parsed']
            dt = datetime.fromtimestamp(mktime(timef))
            if dt > ptime:
                videos.append(feed['items'][j]['link'])

    if len(videos) == 0:
        print('Sorry, no new video found')
    else:
        print(str(len(videos))+' new videos found')

    ydl_opts = {'ignoreerrors': True}

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

    f = open('last.txt', 'w')
    f.write(str(ftime))
    f.close()

我有一个问题,因为我对python一无所知,也无法弄清楚如何正确放置选项。我当然知道它会在这里附近

  ydl_opts = {'ignoreerrors': True}

由于python脚本中的'ignoreerrors'反映了the youtube-dl doc中的--ignore-errors-i选项,因此我想我周围应该有类似'output'的东西,但我不知道如何添加我的选项'%(uploader)s - %(title)s.%(ext)s',而我尝试过的所有方法都失败了,那么一个真正知道它如何工作的人可以告诉我我应该怎么做吗?

1 个答案:

答案 0 :(得分:3)

非常感谢c2huc2hu为他指向我的第二个链接,我正在寻找'output'的时候'outtmpl',所以我这样修改了脚本:

ydl_opts = {'ignoreerrors': True, 'outtmpl': '%(uploader)s - %(title)s.%(ext)s'}

它的工作方式就像我想要的那样。