我主要使用yt-dlp 来保存技术教程等的离线副本,因此可能需要根据您的用例进行调整。我喜欢捕捉很多非标准指标,例如#likes/#views/我下载视频的日期,因为当我下载了 4 或 5 个教程并想看看哪个教程最受欢迎时,我发现这些信息很有用在我下载它们的时候(帮助我选择第一个观看)。 link in the other answer是一个很好的参考。但是由于(目前唯一的)其他答案没有试图非常彻底地解释细节或提供任何具体的例子,我决定也尝试根据我自己的经验添加一个。
我使用了一个大型包装函数,其中很多实际上是由我的设置中的变量/函数参数控制的,但是如果我想以 480p 下载特定的视频格式(通常在屏幕文本命令上),这里是一个生成的命令示例在较低的分辨率下变得难以阅读,而高分辨率会占用更多的磁盘空间)。
这是来自 Linux 上的 bash shell 函数,但除了我如何使用变量之外,yt-dlp 本身的所有内容都应该是跨平台的。显然,您不需要我使用的所有选项。我只是想提供一个完整的例子。相关选项在 sn-p 下方解释。
local downloadTimestamp="$(date +'%F %T %Z')";
# double-escape any colons ONCE to prevent them being interpretted by --parse-metadata
downloadTimestamp="${downloadTimestamp//:/\:}";
yt-dlp -f "bestvideo+bestaudio/best"
--format-sort res:480,+size,+br,codec
-o "%(uploader)s_-_%(title)s.%(ext)s"
--parse-metadata "${downloadTimestamp}:%(meta_download_date)s"
--parse-metadata "%(like_count)s:%(meta_likes)s"
--parse-metadata "%(dislike_count)s:%(meta_dislikes)s"
--parse-metadata "%(view_count)s:%(meta_views)s"
--parse-metadata "%(average_rating)s:%(meta_rating)s"
--parse-metadata "%(release_date>%Y-%m-%d,upload_date>%Y-%m-%d)s:%(meta_publish_date)s"
--restrict-filenames --windows-filenames
--quiet --no-warnings
--ignore-errors --prefer-free-formats
--xattrs --no-overwrites
--sub-lang en --embed-subs --add-metadata --merge-output-format mkv
--write-auto-subs --embed-metadata --embed-thumbnail
"${url}"
--parse-metadata 具有 TO:FROM 参数语法。如果您的目标是从页面捕获某种元数据并将其嵌入下载的文件中,尽管名称不是最直观的,但这是您需要用于映射值的最相关选项。 --embed-metadata 选项对于将元数据嵌入音频/视频文件而不是作为第二个文件也很重要。
--parse-metadata 参数的TO 部分可以是字符串文字或从脚本中的变量扩展而来的一些文本。或者它可以是另一个yt-dlp 格式字符串,如%(artist)s 或%(title)s。格式字符串也可以自定义,如%(release_date>%Y-%m-%d)s。如果第一个字段为空(例如%(release_date>%Y-%m-%d,upload_date>%Y-%m-%d)s:%(meta_publishdate)s),您甚至可以使用自定义格式字符串回退到辅助字段。如果要从变量中添加字符串文字或值,请务必确保不存在冒号 (:),或者使用反斜杠转义任何打算作为值一部分的冒号,就像我对downloadTimestamp 在上面。例如:
--parse-metadata "Tutorial\:Intro to parse-metadata:%(meta_dummy)s"
或者
--parse-metadata 'Foo:Bar:%(meta_dummy)s"
--parse-metadata 参数的FROM 部分基本上是单词“元”,后跟下划线和现有或新元数据字段的名称。字段名称在--parse-metadata 中指定为小写,但在实际文件中似乎全部大写。我在上面 sn-p 中引用的所有字段都是我编写的自定义字段。
然后我可以稍后使用mediainfo 或类似工具在下载的文件中查看它们。例如,在 Linux 上,我可以这样做(注意:mediainfo 是跨平台的,并且是如果您对终端不满意,请使用 GUI):
$ mediainfo --Language=raw --Full --Inform="General;%LIKES%" "${filePath}"
3
$ mediainfo --Language=raw --Full --Inform="General;%VIEWS%" "${filePath}"
95
$ mediainfo --Language=raw --Full --Inform="General;%PUBLISH_DATE%" "${filePath}"
2022-04-05
$ mediainfo --Language=raw --Full --Inform="General;%DISLIKES%" "${filePath}"
NA
如果从未捕获到 DISLIKES 字段,您将获得 NA。例如,如果您从没有评级/不喜欢系统的网站获取视频,就会发生这种情况。或者,特别是对于 youtube,如果您尝试捕获不启用不喜欢的频道/视频的元数据(这是当今的默认设置)。