从 Linux 命令行同时播放视频文件和音频文件

Play video file and audio file simultaneously from Linux command line

我想从 Linux 命令行同时播放单独的视频流和音频流,例如使用cvlcmpv.

更具体地说,我想使用 youtube-dl 和播放器播放高质量格式的 YouTube 视频。


更多详情:

我正在使用此命令在我的电脑上播放 YouTube 视频:

youtube-dl -i <youtube.com/url> -o - | mpv -

假设我有以下可用的 YouTube 视频格式:

249          webm       audio only tiny   62k , opus @ 50k (48000Hz), 14.14MiB
251          webm       audio only tiny  158k , opus @160k (48000Hz), 35.68MiB
303          webm       1920x1080  1080p60 4429k , vp9, 60fps, video only, 536.78MiB
299          mp4        1920x1080  1080p60 6901k , avc1.64002a, 60fps, video only, 884.09MiB
22           mp4        1280x720   720p 1339k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz) (best)

youtube-dl 会自动选择此列表的最后一个条目,因为它是一种在一个文件中包含视频和音频的格式。

有什么方法可以在我的电脑上播放格式 303 和 251 吗?

如果我想下载它们,我会使用:

youtube-dl -i <youtube.com/url> -f 303+bestaudio

youtube-dl 在这种情况下所做的是分别下载视频和音频文件,然后使用 ffmpeg 将它们合并为一个文件。 但是我不知道是否有可能在不先将它们下载到文件中的情况下播放这两个流。

好的,我想我想出了一个解决方案。

我使用的命令如下:

ffmpeg -loglevel quiet -i $(youtube-dl -g youtube.com/url -f 303) -i $(youtube-dl -g youtube.com/url -f bestaudio) -f matroska -c copy - | mpv -

  • youtube-dl -g 选项只会 return url 到视频或音频流。
  • 在这种情况下,它会将 urls 传递给正在执行合并过程的 ffmpeg。
  • -f matroska 告诉 ffmpeg 使用 mkv 容器格式
  • -c copy 表示不应该进行重新编码

编辑:
出于某种原因,在我的 systemm 上,输入在 ffmpeg 退出后被破坏。现在我通过输入 reset 来解决这个问题,直到找到更好的解决方案。