在没有管道的情况下结合 youtube-dl 和 VLC

for*_*rin 6 vlc json youtube-dl

youtube-dl -o - <webpage> | vlc -在 VLC 中显示视频。但是,视频是通过管道传输的(通过类似fd://0),这抑制了向前/向后跳跃的可能性。

但是,youtube-dl -j <webpage>列出了包含多个“url”属性的 JSON 数据。如果你这样做了vlc <url>,VLC 现在会显示视频长度,让我们跳转等等,就像我们在播放本地视频一样。

问题:现在,完全可以编写一个提取 URL 的小型 Python 脚本,但是有没有一种简单的方法可以仅使用简单的 Bash(最好是单行)来执行此操作?

注意:youtube-dl -j列出了一系列不同质量的视频流,最好选择质量最高的视频。

fra*_*san 10

在 shell 中解析 JSON 通常不是一个好主意。你可以很容易地发现,在 U&L 上,几乎所有关于“我如何在 shell 中解析这个 JSON?”的问题的答案。最终使用专门的工具(例如jqjshon)。

这就是为什么我建议youtube-dl在多个视频版本可用时利用选择一个视频版本的能力,并将其 URL 打印在标准输出上而不是下载它:

  • --format-f: 让您...指定格式。要获得最高质量,只需指定best. 实际上,在您的情况下,这可能不是必需的,因为(请参阅手册页youtube-dl(1)):

    默认情况下 youtube-dl 尝试下载最佳可用质量

  • --get-url, 或-g, 避免下载任何视频,只将所选视频的 URL 打印到标准输出。

然后,利用vlc从 URL 播放(和搜索)视频的能力。您可以通过管道将 URL 发送到vlc

youtube-dl --get-url --format best 'https://www.youtube.com/watch?v=video_id' | vlc -
Run Code Online (Sandbox Code Playgroud)

或使用命令替换以vlcURL 作为参数调用:

vlc "$(youtube-dl --get-url --format best 'https://www.youtube.com/watch?v=video_id')"
Run Code Online (Sandbox Code Playgroud)