我可以从视频中提取音频:
yt-dlp -x --audio-format vorbis --audio-quality 256k --embed-thumbnail -P ~/Music -o "John Doe - Cool song.%(ext)s" tubelink.kom现在,我想嵌入基于文件名格式输出的元数据,可以吗?在我的例子中,代码将是艺术家John和宋名酷歌。谢谢。
发布于 2022-10-26 03:24:35
我主要使用yt-dlp来保存技术教程等离线副本,因此可能需要根据您的用例进行调整。我喜欢捕捉很多非标准的指标,比如# like /# views /我下载视频的日期,因为当我下载了4或5个教程时,我发现这个信息很有用,我想看看在我下载的时候哪个是最受欢迎的(帮助我选择第一个要看的)。另一个答案中的链接 是的一个很好的参考。但由于(目前只有)其他答案没有试图非常彻底地解释细节或提供任何具体的例子,我决定尝试添加一个基于我自己的经验。
我使用了一个大型包装器函数,其中很多都是由设置中的变量/函数参数控制的,但这里是一个命令的示例,如果我想下载480 p的特定视频格式(通常,屏幕上的文本命令很难在分辨率较低的情况下读取,高分辨率占用更多磁盘空间)。
这是来自Linux上的bash shell函数,但是除了我如何使用变量之外,yt-dlp本身中的所有东西都应该是跨平台的。显然,您不需要我使用的所有选项;我只是想提供一个完整的示例。相关的选项将在下面的片段中解释。
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所做的那样。例如:
--parse-metadata "Tutorial\\:Intro to parse-metadata:%(meta_dummy)s"或
--parse-metadata 'Foo\:Bar:%(meta_dummy)s'FROM参数的--parse-metadata部分基本上是单词"meta“,后面是下划线和现有元数据字段或新元数据字段的名称。字段名在--parse-metadata中指定为小写,但似乎是在实际文件中的所有大写中创建的。我在上面片段中引用的所有字段都是我自己组成的自定义字段。
然后,我可以使用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字段,您将获得它的DISLIKES。例如,如果您从没有评级/不喜欢系统的站点获得视频,就可能发生这种情况。或者,对于youtube来说,如果你试图捕捉不允许不喜欢的频道/视频的元数据(这是现在默认的)。
发布于 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"
https://stackoverflow.com/questions/71347719
复制相似问题