如何使用 yt-dlp 仅下载 YouTube 视频的评论而不下载实际的视频?

如何使用 yt-dlp 仅下载 YouTube 视频的评论而不下载实际的视频?

在搜索了很长时间之后,我刚刚发现 yt-dlp(我已经安装并每天使用它来下载 YouTube(和其他)视频)支持获取用户评论并将其保存为 JSON 文件

但令人沮丧的是,我找不到任何选择仅有的这样做,同时不下载视频。怎么做到的?可能吗?如果不可能,那真是太遗憾了,因为这是一个很棒的“独立”功能,我经常想在不下载大量视频文件的情况下使用它。我自己几乎不可能实现,因为 YouTube 让阻止机器人/自动化变得极其困难和复杂。

我已经看了这本手册很长时间了:https://github.com/yt-dlp/yt-dlp

答案1

--dump-single-json (or simply -J)您可以使用或使用参数转储 JSON --no-download

# writes info.json in working dir
yt-dlp --write-comments --no-download "$url"

# dump complete JSON with comments
yt-dlp --write-comments --dump-single-json -o "$file" "$url"
yt-dlp --write-comments --dump-single-json "$url" > "$file"

# Pretty print with JQ (JSON processor, package needs to be installed)
yt-dlp --write-comments --dump-single-json "$url" | jq
yt-dlp --write-comments --dump-single-json "$url" | jq  > "$file"

然后使用JQ查询评论。

jq '.comments' "$file" > comments_only.json # file input
jq '.comments' <<<"$json" > comments_only.json # var input

或者

some_command | jq '.comments'

.comments是此处 JSON 属性“评论”的 JQ 选择器。

如果您想将使用 JQ 隔离的那些注释集成到另一个 JSON 文件中,JQ 方法会变得更加复杂。

这里有一个例子,我通过这些条目来推动你前进,以防你选择走这条路线。

  old_json=$(jq '.' "$json_file")
  entries=$(jq -s '.[0].entries += .[1].entries | .[0].entries | sort_by(.date) | reverse' <<<"$old_json" <<<"$json")
  json=$(jq -s '.[0].entries = .[1] | .[0]' <<<"$old_json" <<<"$entries")

答案2

yt-dlp有一个名为的选项--skip-download,对我来说似乎有用。以下是文档

--skip-download    Do not download the video but write all related files (Alias: --no-download)

答案3

我也查看了 yt-dlp 的文档,似乎没有只下载评论的选项。你可以向开发人员建议此功能。

如果你喜欢编程,你可以使用 YouTube 数据 API 亲自获取评论。

文章 提取并预处理 YouTube 评论 包含详细的解释以及用于提取注释并将其写出为 CSV 文件的 Python 代码。它还包含有关清除冗余字符(例如表情符号)和语言检测(如果您只想要英文注释)的建议。

答案4

我正在使用 --get-description。它会下载视频的描述,而不是用户评论。

这是 YouTube-dl 的一个选项,并且它仍然在 yt-dlp 中起作用。

相关内容