在我的bash脚本中,我一直下载视频:
youtube-dl -f mp4 -o '%(id)s.%(ext)s' --no-warnings $URL
然后获得视频标题:
TITLE=$(youtube-dl --skip-download --get-title --no-warnings $URL | sed 2d)
这两个命令都需要一些时间:前者需要1-10分钟(取决于视频持续时间),后者需要10-20秒。
下载视频时有没有办法在后台获取视频标题?
PS。我无法发送到后台第一个命令(下载视频),因为在我使用视频文件后:获取rss feed中项目元的文件大小和持续时间。
答案 0 :(得分:2)
虽然您可以在后台运行第二个命令,从而向YouTube发出两个请求,但最好是通过一次调用执行youtube-dl
,使用{{3} }选项,结合--print-json
过滤器:
title=$(youtube-dl -f mp4 -o '%(id)s.%(ext)s' --print-json --no-warnings "$url" | jq -r .title)
视频将在后台下载,所有视频详情将立即打印。然后,您可以按上述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)
如果您希望在下载时将进度输出并将元数据存储到JSON文件,则必须使用jq
选项。数据将存储在名为视频文件的文件中,但扩展名为.info.json
。例如:
youtube-dl -f mp4 -o 'video.%(ext)s' --write-info-json "$url"
title=$(jq -r ".title" "video.info.json")