如何播放 Youtube 的 8K 视频

事情的起源是无意中搜到了一个 8K 视频,自然想着要体验一下。在我手机上理所当然地无法播放,在我笔记本上可以正常播放。本来这样就完了,不过遗憾的是我的显示屏只有 2K,并不能真正体验到 8K 的效果,于是找了一个有 4K 显示屏的同学来尝试(虽然还是不够……),结果他不能正常播放。

Youtube 的视频在 4K 及以下用的都是 VP9 编码,但是到了 8K 就变成了 AV1 编码(不是 AVC1)。这个 AV1 要 30 系显卡才能硬解,而他的显卡是 10 系,只能软解这个 8K 视频,当然是无力回天。

于是用 yt-dlp 把这个视频下载下来,试图转换成其他编码播放。由于解码实在是很慢,中间尝试了在有 30 系显卡的服务器上转码,但是 ffmpeg 的一般版本似乎不支持硬解 av1。在 Nvidia 的网站上找了个编译说明,手动编译了 ffmpeg,不知道为什么还是不愿意硬解,最后只好放弃。转成 HEVC 之后,在他的电脑上就可以正常播放了。

到这里好像都结束了,其实还有一个问题没有解决:为什么一开始在我的笔记本上可以正常播放?

我笔记本的显卡有 i7-1165G7 的核显和 MX450,后者根本不支持音视频编解码,反而是前者还支持硬解 AV1。在上面对各种编码和各种播放方案进行了测试,结果如下:

PotPlayer 内置 ffmpeg PotPlayer 外接 LAV Video Decoder Chrome Firefox
AVC 软解 软解 软解 无法播放
HEVC 硬解,画面跟不上声音 硬解,画面跟不上声音 不支持 不支持
VP9 硬解,画面跟不上声音 硬解,画面跟不上声音 正常硬解 软解
AV1 正常硬解 硬解,画面跟不上声音 正常硬解 软解

直接在 Youtube 上播放的时候,因为正好 Chrome 可以正确调用 AV1 的硬解,所以才能正常播放。

命令行

最后记录一下命令行,都是直接调用 ffmpeg,没有配置额外选项。

首先是 yt-dlp 只能下载单独的视频轨和音频轨,可以先将两者合并成 av1.mp4

1
ffmpeg -i video.mp4 -i audio.webm -c copy av1.mp4

之后的转码的命令行如下:

1
2
3
ffmpeg -i av1.mp4 -c:a copy -c:v h264 avc.mp4
ffmpeg -i av1.mp4 -c:a copy -c:v hevc hevc.mp4
ffmpeg -i av1.mp4 -c:a copy -c:v vp9 vp9.mp4

也可以最后再合并音轨,不过封装音轨不费什么时间,没多大区别。