1.杜比视界片源在非杜比认证显示器播放存在偏色问题

        最近在看一部篮球纪录片,发现下载下来的是杜比视界的 HEVC 封装格式。用常规软件打开一看,颜色偏色,偏绿且偏紫,如图01所示:

图01_杜比片源颜色偏色

        要是放在往常,我在家里用 Windows 系统电脑自带的播放器,配合安装 HEVC 解码插件和 Dolby Vision 插件,就能完美播放。但今天在公司用 Mac Studio,显然没法用这个办法。一番搜索后,我发现了一个很不错的多平台开源播放器 ——MPV 播放器,大家如果有需要,可以前往其官网(https://mpv.io)下载安装,如图02所示:

图02_MPV播放器官网首页

        下载安装完成后,macOS 用户直接用 MPV 播放器打开视频,就能得到正常色彩;而 Windows 用户需要先打开软件,再将视频拖拽到 MPV 播放器中播放(正确色彩如图03所示)。

图03-杜比片源颜色正常

2.解决杜比视界片源偏色问题的三种办法

        对大部分用户来说,其实只要用 MPV 播放器,就能解决非杜比设备播放杜比视界片源偏色的问题。但如果想让这个文件在各个设备上都能正确播放,解决方案其实有不少,我一共总结了三种,却偏偏选了最难的一种尝试,这里先说说两个最容易的办法:

2.1安装 MPV 播放器

        第一种是在多平台安装 MPV 播放器 —— 除了 iOS系统,MPV 基本支持大部分平台;

2.2 使用云盘进行播放

        第二种是安装夸克网盘,把文件存到网盘里直接在线播放,就能得到正常色彩,这点我还挺意外的,没想到夸克在线居然直接支持杜比视界片源的在线播放,当然大家也可以尝试看看别的网盘是否支持以正常颜色播放杜比视界。

2.3使用 FFmpeg 配合 libplacebo 滤镜,把杜比视界片源转换成 HDR 或者 SDR 片源

        最后是第三种办法:使用 FFmpeg 配合 libplacebo 滤镜,把杜比视界片源转换成 HDR 或者 SDR 片源 —— HDR 片源大部分播放器都能正常显色,SDR 片源的兼容性则更好。以下是具体操作步骤:

2.3.1前往官网安装FFmpeg或者使用FFmpeg预编译程序包

        首先可前往 FFmpeg 官网(https://ffmpeg.org/download.html),选择对应平台的安装源,为电脑安装 FFmpeg。安装完成后,可在终端输入命令 ffmpeg -version 验证是否安装成功(如图04所示)。是否需要将 FFmpeg 配置为系统全局变量,可根据自身需求决定。

图04_ FFmpeg版本查看

2.3.2安装 libplacebo 滤镜库

        FFmpeg 安装完成后,需手动安装 libplacebo 滤镜。libplacebo 是一款功能强大的开源视频渲染库,常作为 FFmpeg 滤镜(-vf libplacebo)使用,专注于高级视频处理,尤其擅长 HDR 转 SDR、色彩管理、格式转换、缩放等任务。其核心优势在于对现代视频标准(如 HDR10、Dolby Vision、广色域)的深度支持,以及高度可定制的渲染参数,能精准控制视频的色彩、动态范围和画质。不同系统安装 libplacebo 滤镜的具体命令,可参考如图05(内容来源于谷歌搜索;这里不推荐咨询豆包,因为我在豆包的指导下走了一段曲折的试错路,花了四个小时才安装完成)。

图05_安装 libplacebo 滤镜

        我通过 Windows 系统和 macOS 系统完成了 libplacebo 滤镜的安装。Windows 系统下,我没有按照谷歌搜索的方法安装,而是偷了个懒 —— 直接下载了 MPV 播放器在 GitHub 上构建的预先编译好的 ffmpeg.exe 来使用。因为我心想,MPV 播放器能直接播放杜比视界内容,那它的 ffmpeg.exe 肯定带有 libplacebo 滤镜。有需要的朋友可前往 MPV 的 GitHub 页面(https://github.com/shinchiro/mpv-winbuild-cmake/releases)下载,选择适合自己的版本即可(如图06所示):

图06_MPV预编译的FFmpeg

        macOS 系统下配合 Homebrew 安装比较简单,Homebrew 的安装教程可参考相关指引;安装完 Homebrew 后,直接在终端输入 brew install libplacebo 命令即可完成安装。通过终端输入 ffmpeg -filters | grep libplacebo 可验证 libplacebo 是否安装成功。如图07所示:

图07_查看LibPlacebo是否安装

       安装完 FFmpeg 和 libplacebo 滤镜后,我们直接进入需要转换的素材文件夹,打开终端执行 FFmpeg 命令即可(如果 FFmpeg 未配置为全局使用,记得将其放置在需要转换的素材文件所在目录)。

       在macOS系统下可以参考在终端使用这个命令,用于将杜比视界(或其他格式)的 MKV 文件转换为 HDR10 HEVC格式的 MP4 文件:

ffmpeg -i input.mkv -vf libplacebo,format=yuv420p10 -c:v hevc_videotoolbox -c:a copy output.mp4 

        该段代码在终端运行如图08-1所示,后续会解释这段代码:

08-1 _杜比视界转HDR终端跑图

运行完这段代码后,你就可以得到 HDR 视频文件,我们可以使用 MediaInfo 查看两段视频的信息,如图08-2所示:

08-2_使用mediainfo查看视频信息

       Dolby Vision 已经被去除,且视频已转换为 HEVC 编码的 H.265 格式文件,这样就可以在支持HEVC设备上非杜比认证播放设备以正常颜色播放该段视频。接下来解释一下这段代码,如图08-3所示:

08-3_杜比视界转HDR代码解释(Mac Studio)

       需要注意的是,命令中用于 GPU 加速编码的 hevc_videotoolbox 依赖 macOS 系统的 VideoToolbox 框架,其兼容性与硬件相关:我的 Mac Studio 2022(M1 Max 芯片)可正常使用;非 Apple Silicon 芯片(如 Intel 处理器)的 Mac 需搭载支持 HEVC 编码的核显(多数 2017 年后的 Intel Mac 符合条件);若设备不支持(如老旧 Intel 机型无兼容核显),需替换为软件编码器 libx265,例如将 -c:v hevc_videotoolbox 改为 -c:v libx265 -crf 23(-crf 用于控制质量,18-25 为常用范围)。

但需注意,若无 GPU 加速,使用 FFmpeg 转码会非常慢。可以通过以下命令查看自己电脑支持的 GPU 加速的 H.264 和 H.265 编码器(注:原表述 “解码器” 为笔误,实际需查看编码器):

查看 H.264 编码器命令:ffmpeg -encoders | grep 264 如图08-4所示:

08-4_查看电脑GPU加速编码器 H264

查看 H.265 编码器命令:ffmpeg -encoders | grep 265 如图08-5所示:

08-5_查看电脑GPU加速编码 H265

       通过以上的命令,我们就可以得到H265格式的HDR视频文件,这个格式在大部分主流的播放器都能以正确的颜色显示,但如果你的设备和播放器还是不支持HDR播放的话,可以使用这个命令对文件进行转码:

ffmpeg -i input.mkv -vf libplacebo=tonemapping=hable:gamut_mode=perceptual:colorspace=bt709:color_trc=bt709:color_primaries=bt709:range=limited:dithering=blue:format=yuv420p -c:v h264_videotoolbox -c:a copy output.mp4

       该段代码在终端运行如图08-6所示,后续也会解释这段代码:

08-6_杜比视界转SDR终端跑图

       运行完这段代码后,你就可以得到 SDR 视频文件,我们依旧可以使用 MediaInfo 查看两段视频的信息,如图08-7所示:

08-7_使用mediainfo查看视频信息

       Dolby Vision 已被去除,且视频已转换为 AVC 编码的 H.264 格式文件,这样就能在绝大部分设备上以正常颜色播放,兼容性比 H.265 的 HDR 视频更强。例如,macOS 系统自带的 QuickTime 无法播放此前转码的 H.265 HDR 视频,但这个视频可以正常播放。接下来接下来解释这段段代码,具体说明如下图所示

08-8杜比视界转SDR代码解释(Mac Studio)

       这段代码的主要难点是使用 libplacebo 色彩处理库的参数配置字符串,将视频(通常是 HDR 源)通过 Hable 色调映射转换为 SDR 输出,适配 BT.709 色彩空间和有限亮度范围,同时通过蓝色噪声抖动优化色彩深度转换的画质,最终输出为 YUV420p 格式,适合在普通 SDR 显示器(如电脑、电视)上播放。该代码参考自 GeoffreyA(来源:https://forum.doom9.org/showthread.php?t=186009),并对其进行了部分调整。

      以下是各参数的详细解释:

核心参数拆解

libplacebo:指使用 libplacebo 库进行图像处理(libplacebo 是一个专注于视频渲染和色彩管理的开源库,支持高级色彩处理、HDR 转 SDR 等功能)。

tonemapping=hable色调映射(Tonemapping):用于将高动态范围(HDR)视频的亮度范围压缩到标准动态范围(SDR)设备可显示的范围,避免过曝或欠曝。hable:采用 Hable 色调映射算法(也称为 “胶片式” 映射),特点是保留暗部细节的同时,对高光进行自然压缩,视觉效果更接近真实胶片的明暗过渡,是常用的高质量映射算法。

gamut_mode=perceptual色域模式(Gamut Mapping):当视频色域(如 HDR 的 BT.2020)超出显示设备色域(如 SDR 的 BT.709)时,用于调整色彩以适配设备,避免色域外的颜色失真。perceptual:采用 “感知型” 映射,优先保证色彩的整体视觉感知一致性,而非严格保留单个颜色的数值,适合大多数场景,色彩过渡更自然。

colorspace=bt709色彩空间(Colorspace):定义视频的色域范围(即可表示的颜色集合)。bt709:对应 Rec.709 标准(HDTV 标准),是 SDR 视频的主流色彩空间,覆盖大部分显示器的色域范围。

color_trc=bt709传输函数(Color Transfer Characteristic):描述亮度信号如何被编码和解码(因人类视觉对亮度的感知是非线性的)。bt709:使用 Rec.709 标准的传输函数,匹配 SDR 设备的亮度编码方式,确保亮度显示准确。

color_primaries=bt709原色定义(Color Primaries):指定红、绿、蓝三原色在色度图中的坐标,决定色彩的基准。bt709:采用 Rec.709 标准的原色坐标,与 HDTV 和大多数显示器的物理原色匹配。

range=limited亮度范围(Luminance Range):定义视频信号的亮度值范围。limited:有限范围(也叫 “视频范围”),亮度值范围为 16-235(8 位信号),黑色对应 16,白色对应 235,是电视和视频设备的标准范围(区别于 “full” 全范围 0-255,后者常见于电脑显示器)。

dithering=blue抖动处理(Dithering):当降低色彩深度(如从 10 位降到 8 位)时,通过添加微小噪声避免色带(banding)瑕疵。blue:采用 “蓝色噪声” 抖动算法,噪声分布更均匀,视觉上比其他噪声(如白色噪声)更不明显,是高质量抖动的常用选择。

format=yuv420p像素格式(Pixel Format):指定输出视频的色彩编码格式。yuv420p:YUV 色彩空间的一种,亮度(Y)和色度(U、V)分离,U 和 V 通道水平 / 垂直方向采样率为 Y 的一半(4:2:0),是视频存储和传输的主流格式(占用空间小,兼容性好)。

      这句代码在最后输出编码使用 h264_videotoolbox,如果你比较在意文件体积,可以适当降低码绿,建议加上 -b:v(指定视频码率)或 -q:v(指定质量等级)参数。

      最后如果你是 Windows 系统的话,可以参考以下命令,用于将杜比视界(或其他格式)的 MKV 文件转换为 HDR10 HEVC格式的 MP4 文件:

       ffmpeg.exe -i input.mkv -vf libplacebo,format=yuv420p10 -c:v hevc_amf -c:a copy output.mp4

       关于这段代码的解释如下图08-9所示

08-9-杜比视界转HDR代码解释(Windows)

 

       这段代码的解释,与我们在 macOS 系统下将杜比视界转为 HDR 的逻辑基本一致;稍有不同的是,hevc_amf 是 Windows 系统下 AMD 显卡的硬件加速编码器,若使用英伟达显卡,则需改用 hevc_nvenc。无论是 macOS 系统还是 Windows 系统,一定要启用 GPU 编码进行视频编码,有无 GPU 加速的效率差异非常大,这一点必须提醒各位朋友。

       而对于在 Windows 系统下将杜比视界(或其他格式)的 MKV 文件转换为 SDR AVC 格式的 MP4 文件,这里就不做演示了。大家可以结合 macOS 系统下的操作进行适当修改。文章就到这里,再见!我是狗空蓝,下篇文章再见!

2
0