首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据yt中的输出文件名设置元数据。

根据yt中的输出文件名设置元数据。
EN

Stack Overflow用户
提问于 2022-03-04 07:08:48
回答 2查看 3.4K关注 0票数 2

我可以从视频中提取音频:

代码语言:javascript
复制
yt-dlp -x --audio-format vorbis --audio-quality 256k --embed-thumbnail -P ~/Music -o "John Doe - Cool song.%(ext)s" tubelink.kom

现在,我想嵌入基于文件名格式输出的元数据,可以吗?在我的例子中,代码将是艺术家John和宋名酷歌。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2022-10-26 03:24:35

我主要使用yt-dlp来保存技术教程等离线副本,因此可能需要根据您的用例进行调整。我喜欢捕捉很多非标准的指标,比如# like /# views /我下载视频的日期,因为当我下载了4或5个教程时,我发现这个信息很有用,我想看看在我下载的时候哪个是最受欢迎的(帮助我选择第一个要看的)。另一个答案中的链接 的一个很好的参考。但由于(目前只有)其他答案没有试图非常彻底地解释细节或提供任何具体的例子,我决定尝试添加一个基于我自己的经验。

我使用了一个大型包装器函数,其中很多都是由设置中的变量/函数参数控制的,但这里是一个命令的示例,如果我想下载480 p的特定视频格式(通常,屏幕上的文本命令很难在分辨率较低的情况下读取,高分辨率占用更多磁盘空间)。

这是来自Linux上的bash shell函数,但是除了我如何使用变量之外,yt-dlp本身中的所有东西都应该是跨平台的。显然,您不需要我使用的所有选项;我只是想提供一个完整的示例。相关的选项将在下面的片段中解释。

代码语言:javascript
复制
local downloadTimestamp="$(date +'%F %T %Z')";
# double-escape any colons ONCE to prevent them being interpreted 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选项对于将元数据嵌入音频/视频文件而不是作为第二个文件也很重要。

TO参数的--parse-metadata部分可以是字符串文本,也可以是从脚本中的变量展开的文本。也可以是另一个yt-dlp格式字符串,如%(artist)s%(title)s (注意:这里使用的格式字符串与创建输出模板的格式字符串相同。,完整的列表可以找到这里 -查找文本“可用字段是”)。格式字符串也可以像%(release_date>%Y-%m-%d)s一样进行定制。您甚至可以拥有一个自定义格式字符串,如果第一个字段为空(例如,%(release_date>%Y-%m-%d,upload_date>%Y-%m-%d)s),则该字符串返回到次要字段。如果要从变量中添加字符串文本或值,必须确保不存在冒号(:),或者使用反斜杠转义用作值一部分的任何冒号,就像我在上面对downloadTimestamp所做的那样。例如:

代码语言:javascript
复制
--parse-metadata "Tutorial\\:Intro to parse-metadata:%(meta_dummy)s"

代码语言:javascript
复制
--parse-metadata 'Foo\:Bar:%(meta_dummy)s'

FROM参数的--parse-metadata部分基本上是单词"meta“,后面是下划线和现有元数据字段或新元数据字段的名称。字段名在--parse-metadata中指定为小写,但似乎是在实际文件中的所有大写中创建的。我在上面片段中引用的所有字段都是我自己组成的自定义字段。

然后,我可以使用mediainfo或类似的工具在下载的文件中查看它们。例如,在Linux上,我可以这样做(注意:mediainfo是跨平台的,如果您对终端不满意,就有一个GUI ):

代码语言:javascript
复制
$ 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字段,您将获得它的DISLIKES。例如,如果您从没有评级/不喜欢系统的站点获得视频,就可能发生这种情况。或者,对于youtube来说,如果你试图捕捉不允许不喜欢的频道/视频的元数据(这是现在默认的)。

票数 1
EN

Stack Overflow用户

发布于 2022-05-05 06:22:36

在文档中寻找“元数据”。

https://github.com/yt-dlp/yt-dlp#modifying-metadata-examples

# Interpret the title as "Artist - Title"

yt-dlp --parse-metadata "title:%(artist)s - %(title)s"

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71347719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档