如何在不下载视频的情况下使用 youtube-dl 获取有关视频的信息

How to get info about video, without downloading it, using youtube-dl

我使用 python 和 youtube-dl 库制作了自己的脚本,可以轻松地从在线电台下载歌曲。它的工作原理是复制一个播放列表,将其保存到一个 .txt 文件,然后 运行 一个脚本遍历播放列表并丢弃每一行的时间,然后用歌曲名称搜索 youtube 并下载第一首它发现。 由于很多歌曲是重复的,程序会再次下载歌曲并对其进行处理(将其转换为 mp3 并仅隔离音频)并覆盖旧歌曲。我感兴趣的是如何在不下载的情况下只检索视频名称,并检查该歌曲是否已经下载以避免不必要地浪费时间和资源。我知道“”团队已经准备好了歌曲,我不确定它是否可以不同地使用。下面是一个.py脚本和一个歌曲列表的例子(列表通常有500行,所以有很多重复)。

<main.py>

import os
radio = "BBCRadio1"
lista = []
with open ("./list.txt" ,"r", encoding="utf8") as f:
    lines = f.readlines()
    for line in lines:
        lista.append(line.split("\t")[1].strip())
lista = list(dict.fromkeys(lista))
for song in lista:
    print("------------------------------------------Downloading " + str(lista.index(song) + 1) + ". song of " + str(len(lista)) + " songs------------------------------------------")
    os.system("youtube-dl  -o \"D:\Projects\YT-DL/songs/" + radio + "/%(title)s.%(ext)s\"  --extract-audio --audio-format mp3 \"ytsearch:" + song + "\"")
<BBCRadio1.txt>

14:32   Harry Styles - Watermelon Sugar
14:27   Drake - Passionfruit
14:24   Phoebe Bridgers - I See You
14:20   Avicii - Lonely Together (feat. Rita Ora)
14:17   Jawsh 685 & Jason Derulo - Savage Love (Laxed - Siren Beat)
14:13   Clipz, Ms. Dynamite, Ms Banks & JayKae - Again
14:09   Katy Perry - Chained To The Rhythm (feat. Skip Marley)
14:06   Dave - Funky Friday (Glastonbury 2019)
14:02   Dave - Location (Glastonbury 2019) (feat. Burna Boy)
13:58   Topic - Breaking Me (feat. A7S)
13:54   Lily Allen - The Fear
13:49   The Weeknd - I Feel It Coming (feat. Daft Punk)
13:46   Sports Team - Going Soft
13:42   Megan Thee Stallion & Beyoncé - Savage (Remix)
13:38   Jonas Brothers - Sucker

我不确定您为什么要使用 youtube-dl 来获取视频元数据。在尝试下载文件之前,您可以使用 os.path.isfile(fname) 查看该文件是否存在于目录中。这样就可以避免重复

或者您可以使用 youtube-dl python 库并设置 download=False

您应该尝试 ytdl 已有的方法来跳过播放列表中已下载的文件。简而言之,--download-archive 功能,source。示例如下:

youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

此处 archive.txt 文件将包含已从播放列表下载的所有视频。

你是这个意思吗?

youtube-dl --write-annotations --write-info-json --skip-download www.youtube.com/yourvideo

--write-annotations 获取注释
--write-info-json 将元数据保存在 json 文件中
--skip-download 跳过视频下载

如果你只想要标题,你可以使用选项 -e--get-title 即“模拟,安静但打印标题”

如果您想要 json 信息而不下载它,您可以使用
-j--dump-json 到“模拟,安静但打印 JSON 信息。有关可用键的说明,请参阅“输出模板”。
-J or --dump-single-json to "Simulate, quiet but print JSON information for each command-line argument. If the URL refers to a playlist, dump the whole playlist information在一行中。"