下载视频时获取 YouTube 视频标题

n0n*_*n0n 7 youtube bash

在我的 bash 脚本中,我始终下载视频:

youtube-dl -f mp4 -o '%(id)s.%(ext)s' --no-warnings $URL
Run Code Online (Sandbox Code Playgroud)

然后获取视频标题:

TITLE=$(youtube-dl --skip-download --get-title --no-warnings $URL | sed 2d)
Run Code Online (Sandbox Code Playgroud)

这两个命令都需要一些时间:前者需要 1-10 分钟(取决于视频时长),后者需要 10-20 秒。

下载视频时有什么方法可以在后台获取视频标题吗?

附言。我无法发送到后台第一个命令(下载视频),因为在处理视频文件后:获取 rss feed 中项目元的文件大小和持续时间。

ran*_*mir 5

尽管您可以在后台运行第二个命令,从而向 YouTube 发出两个请求,但更好的方法是使用该选项并结合过滤器,通过一次调用来完成此操作youtube-dl--print-jsonjq

title=$(youtube-dl -f mp4 -o '%(id)s.%(ext)s' --print-json --no-warnings "$url" | jq -r .title)
Run Code Online (Sandbox Code Playgroud)

视频将在后台下载,所有视频详细信息将立即打印。jq然后,您可以按上述方式过滤感兴趣的字段,或存储它们以供以后使用:

youtube-dl -f mp4 -o '%(id)s.%(ext)s' --print-json --no-warnings "$url" >metadata
title=$(jq -r ".title" metadata)
duration=$(jq -r ".duration" metadata)
view_count=$(jq -r ".view_count" metadata)
Run Code Online (Sandbox Code Playgroud)

如果您希望在下载元数据并将其存储到 JSON 文件时获得进度输出,则必须使用该--write-info-json选项。数据将存储在名为您的视频文件的文件中,但扩展名为.info.json. 例如:

youtube-dl -f mp4 -o 'video.%(ext)s' --write-info-json "$url"
title=$(jq -r ".title" "video.info.json")
Run Code Online (Sandbox Code Playgroud)