让youtube-dl等待直播开始

5
使用 youtube-dl ,您可以轻松下载正在进行的实时流。
$ youtube-dl --hls-use-mpegts <URL>

如果目标直播流还未开始,命令会立即退出并打印如下信息:
[youtube] I1gi2ABCDEf: Downloading webpage
ERROR: This live event will begin in a few moments.

有没有可能让youtube-dl等待直播开始后再进行录制?

我目前的解决方法是:

#pseudo code
while (true) {
    start = time()
    execute youtube-dl
    end = time()
    if (end - start > 10seconds) { #if recording succeeded
        break
    }
    sleep(some seconds)
}

或者这样:
#pseudo code
while (true) {
    if (check_if_live_is_active_using_curl_or_youtube_api()) {
        break
    }
    sleep(some seconds)
}
execute youtube-dl

现在将两者结合起来已经运行得很好了(实际上第二个应该足够,但我也使用第一个作为备选方案),但如果有一种更加优雅的方式就更好了。

3个回答

3

[2023更新]

yt-dlp (youtube-dl的分支) 具有此功能,使用 --wait-for-video <seconds> 选项。需要版本2023.01.02或更高版本。

示例:

yt-dlp --wait-for-video 10 https://www.twitch.tv/team_julienrqt

这将每10秒检查一次流是否活动,并下载该流。


2

如果你正在使用带有systemd的Linux发行版,你可以使用systemd-run来安排一个短暂的定时器单元。例如,如果流媒体从3:30开始:

systemd-run --working-directory=/path/to/save/file --on-calendar=15:30 youtube-dl --hls-use-mpegts <URL>

如果出现问题,您可以添加选项--property Restart=on-failure--property RestartSec=30以进行重试。


1
也许这样可以。
until youtube-dl --hls-use-mpegts <URL>; do continue; done

或者另一种选择。
while [[ true ]]; do youtube-dl --hls-use-mpegts && break || continue ; done

但是如果你正在寻找内置函数,那么是没有的。
最好的方法就是使用脚本或命令行绕过已经做过的事情。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接