youtube-dl:通过忽略在 archive.txt 中指定的视频,在播放列表中下载 youtube 视频 info.json

asd*_*sow 3 youtube-dl

我正在尝试通过 youtube-dl 为 youtube 播放列表中的所有视频下载 json 元数据(不是视频)。我还想在再次运行相同的命令时忽略为播放列表中的视频下载已下载的 json 元数据。所以,这是我尝试过的命令,

youtube-dl -i --write-info-json --skip-download --download-archive archive.txt {youtube-playlist-url}  
Run Code Online (Sandbox Code Playgroud)

--write-info-json写入视频 info.json

--skip-download不下载视频

--download-archive archive.txt archive.txt 包含已下载视频 ID 的列表,因此 youtube-dl 不会再次下载这些视频

但是,将 --skip-download 参数包含到 youtube-dl 会导致视频 ID 未添加到 archive.txt,这表明 yt-dl 仅在下载视频后将视频 ID 添加到 archive.txt。这两个命令(--skip-download & --download-archive archive.txt)可以一起运行吗?或者有没有其他方法可以实现它?

Aji*_*kar 6

yt-dl 仅在下载视频时才会在 archive.txt 中添加一个条目。因此,我认为您的用例不能仅通过 yt-dl 实现。

然而,这种行为可以使用一些命令行魔法来实现,

youtube-dl --skip-download --write-info-json --download-archive archive.txt https://www.youtube.com/playlist\?list\=PLMCXHnjXnTnuFUfiWF4D0pYmJsMROz4sA |tee /dev/tty|grep "\[info] Writing video description metadata as JSON to:" |gawk '{ match($0, /-([a-zA-Z0-9_-]+)\.info\.json/, arr); if(arr[1] != "") print "youtube "arr[1] }' >> archive.txt
Run Code Online (Sandbox Code Playgroud)

youtube-dl --skip-download --write-info-json --download-archive archive.txt {youtube-playlist-url}将下载播放列表视频 .info.json 数据,除了 archive.txt 中的 video_ids

tee /dev/tty会将 youtube-dl 输出流式传输到 stdout 并将其通过管道传输到下一个命令

grep "[info] Writing video description metadata as JSON to:"将从 yt-dl 输出中获取包含下载的 .info.json 文件名的行

gawk '{ match($0, /-([a-zA-Z0-9_-]+).info.json/, arr); if(arr[1] != "") print "youtube "arr[1] }'youtube {video_id}按照文件名的格式打印videoid

>> archive.txt将输出连接到 archive.txt 文件

以下是您运行该命令时发生的情况,
    下载播放列表中视频的 info.json(archive.txt 中的视频除外),并将下载的 info.json 视频 ID 附加到 archive.txt。因此,如果您再次运行相同的命令,yt-dl 将下载播放列表中所有视频的 info.json,除了 archive.txt 中提到的视频 ID