【问题标题】:Get youtube video title while video downloading下载视频时获取 youtube 视频标题
【发布时间】:2017-11-03 13:20:41
【问题描述】:

在我的 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 提要中项目元的文件大小和持续时间。

【问题讨论】:

    标签: bash youtube


    【解决方案1】:

    虽然您可以在后台运行第二个命令,从而向 YouTube 发出两个请求,但最好是通过一次调用youtube-dl,使用--print-json 选项,结合带有jq 过滤器:

    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 文件,则必须改用 --write-info-json 选项。数据将存储在名为您的视频文件的文件中,但扩展名为.info.json。例如:

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

    【讨论】:

    • 谢谢,它有效!我可以将 youtube-dl 输出到 STDOUT 下载进度吗?
    • 在这种情况下,您可能希望改用--write-info-json 选项。查看我的更新。
    猜你喜欢
    • 1970-01-01
    • 2013-03-23
    • 2015-08-09
    • 2012-05-22
    • 2015-10-23
    • 2010-11-16
    • 2012-03-28
    • 1970-01-01
    • 2013-06-18
    相关资源
    最近更新 更多