vs-placebo Readme 翻译

  • ~7.55K 字
  1. 1. 一个基于 libplacebo 的 VapourSynth 插件接口。
    1. 1.1. Debugging libplacebo 处理
    2. 1.2. 安装
    3. 1.3. 在 Linux 上构建:
    4. 1.4. Linux 交叉编译 Windows 版本:
  • 附录
    1. 1. 官方文档
    2. 2. 官方标准
    3. 3. Notes
    4. 4. _Matrix 值列表
    5. 5. _Transfer 值列表
    6. 6. _Primaries 值列表

  • 这个可能不能使用 intel 的核显跑,不过 AMD Radeon(TM) Graphics 的核显可以。(目测跟显存之类的有关,AMD 核显有 GPU 内存,和共享 GPU 内存,Intel 核显只有共享 GPU 内存)

    找到了 Issue

    https://github.com/Lypheo/vs-placebo/issues/41

    一个基于 libplacebo 的 VapourSynth 插件接口。


    placebo.Deband(clip clip[, int planes = 1, int iterations = 1, float threshold = 4.0, float radius = 16.0, float grain = 6.0, int dither = True, int dither_algo = 0])

    输入需要为8或16位整数或32位浮点数。

    • planes:指定要处理的通道。第 n 位为 1 的通道会被处理。例如要处理所有通道,传递 planes = 1 | 2 | 4
      (这种方式可能有些复杂,但实现起来最简单。)
    • dither:是否对去带状处理后的帧进行抖动或四舍五入到输出位深。仅对8位有效。

    详细的 去带状参数
    抖动方法
    请参见 libplacebo 头文件。


    placebo.Tonemap(clip clip[, int src_csp, int dst_csp, int dst_prim, float src_max, float src_min, float dst_max, float dst_min, int dynamic_peak_detection, float smoothing_period, float scen[...])

    执行色彩映射(包括从 HDR 到 SDR 的色调映射,也可以做更多)。
    要求输入为 RGB48 或 YUVxxxP16。
    输出为 RGB48 或 YUV444P16,取决于输入色彩空间。

    • src_csp, dst_csp
      参考 tonemap.c 中的 supported_colorspace 获取有效的 src/dst 色彩空间
      例如, 从 [BT.2020, PQ] (HDR) 到传统 [BT.709, BT.1886] (SDR) 映射,使用 src_csp=1, dst_csp=0
    • dst_prim:目标色域。见 pl_color_primaries
    • src_max, src_min, dst_max, dst_min:源/目标显示亮度,单位为nits(cd/m²)。源亮度可由属性推导。
    • dynamic_peak_detection:启用信号统计以优化HDR色调映射质量。默认启用。
    • smoothing_period, scene_threshold_low, scene_threshold_high, percentile:峰值检测参数。见这里
      • percentile 仅在 v5.264.0+。
    • gamut_mapping:用于处理超出色域颜色的色域映射函数,包括色调映射造成的溢出。默认值为1(感知方式)。可选值有:
      • 0 clip 裁剪
      • 1 perceptual 感知
      • 2 softclip 软裁剪
      • 3 relative 相对
      • 4 saturation 饱和度
      • 5 absolute 绝对
      • 6 desaturate 去饱和
      • 7 darken 变暗
      • 8 highlight 高光
      • 9 linear 线性
    • tone_mapping_function, tone_mapping_mode, tone_mapping_param, tone_mapping_crosstalk, metadata色彩映射参数
    • tone_mapping_function_s:色调映射函数名称,覆盖 tone_mapping_function 数值。
    • use_dovi:是否使用 Dolby Vision RPU 的 ST2086 元数据。默认为从 Dolby Vision 色调映射时启用。
    • visualize_lut:显示色调映射 LUT 的 (PQ-PQ) 图。参见 mpv 文档
    • show_clipping:色调映射时高亮显示被硬裁剪的像素。

    Dolby Vision 支持需要 FFmpeg 5.0 及以上和 git 版 ffms2。


    支持的帧属性

    • PLSceneMax, PLSceneAvg:每场景的动态亮度元数据,单位为 nits(cd/m²)。
      • float[] PLSceneMax:场景峰值亮度。可以按分量(RGB)或单值指定。
      • float PLSceneAvg:场景平均亮度。
      • 需要 libplacebo v5.246.0 或更高版本,否则忽略。
      • 如果 PLSceneMax 按分量指定,则元数据设置为 scene_maxscene_avg
      • 如果为单一亮度值且 v5.257.0+,则设置为 max_pq_yavg_pq_y
      • 启用 use_dovi 时,max_pq_yavg_pq_y 将由 Dolby Vision RPU L1 元数据获得。

    placebo.Resample(clip clip[, int width, int height, string filter = "ewa_lanczos", float radius, float clamp, float taper, float blur, float param1, float param2, float src_width, float src_...])

    输入需为8或16位整数或32位浮点数

    • filter:可选值见头文件(去掉“pl_filter”前缀)。
    • src_width, src_height:源区域尺寸,默认为 clip 尺寸。
    • sx, sy:源区域左上角。可用于亚像素移位。
    • clamp, taper, blur滤波器配置
    • radius, param1, param2核函数配置
    • sigmoidize, linearize:缩放前是否线性化/使用 S 型曲线。RGB 默认启用,YCbCr 默认禁用(NCL YCbCr 不能正确线性化,需转换为 RGB)。GRAY 默认禁用(可能是 YCbCr 通道),可手动启用。HDR 视频建议禁用。
    • sigmoid_center, sigmoid_slope:S 曲线参数。
    • trc:用于线性化的 传递曲线

    placebo.Shader(clip clip, [string shader, int width, int height, int chroma_loc = 1, int matrix = 2, int trc = 1, string filter = "ewa_lanczos", float radius, float clamp, float taper, float ...])

    运行 mpv 语法 的 GLSL shader。

    输入为 YUVxxxP16,输出为 YUV444P16。

    由于 libplacebo/mpv 的自定义 shader 特性设计,shader 不是单独运行的,
    而是注入到 渲染管线 的任意点,最终输出为 RGB。
    因此需要用户指定输出帧属性,libplacebo 会生成符合要求的图像,
    仅当实际渲染相应纹理时才运行指定的 shader。

    • shader:shader 文件路径。
    • shader_s:shader 字符串内容。(优先使用 shader。)
    • width, height:输出尺寸。缩放 shader 需指定。未被 shader 缩放的通道,将用同 Resample 的参数缩放到输出尺寸。
    • chroma_loc:用于推断色度偏移的色度位置。见 pl_chroma_location
    • matrixYUV 矩阵
    • sigmoidize, linearize, sigmoid_center, sigmoid_slope, trc:用于挂载到 LINEAR 或 SIGMOID 纹理的 shader。

    Debugging libplacebo 处理

    所有滤镜都可以接受 log_level 参数,对应 pl_log_level
    默认值为2,仅记录错误信息。


    安装

    如果你使用 Arch,只需执行

    1
    $ yay -S vapoursynth-plugin-placebo-git

    在 Linux 上构建:

    1
    2
    meson build
    ninja -C build

    不建议不用包管理器直接安装到系统。
    否则只需 DESTDIR= ninja -C build install


    Linux 交叉编译 Windows 版本:

    有一个基于 mpv-winbuild-cmake 的实验性构建系统:https://github.com/quietvoid/mpv-winbuild-cmake/commits/vs-placebo-libdovi
    建议在 Arch Linux 下使用,可能会有不同体验(YMMV)。

    附录

    以下是 VS 里保存的视频属性的值的信息,询问了AI,_Transfer 给的时候它就出了问题,所以仅供参考。

    获取信息的方式在 进阶视频压制指南

    官方文档

    https://www.vapoursynth.com/doc/pythonreference.html#video

    官方标准

    https://www.itu.int/rec/T-REC-H.273

    这些都在官方标准里有定义

    Notes

    Display P3 是 DCI-P3 的一个消费级变体。

    SMPTE EG 432-1 标准定义的是 Display P3。
    SMPTE RP 431-2 和 ST 428 标准定义的是 DCI-P3。

    _Matrix 值列表

    Display P3 没有自己专属的 _Matrix (矩阵系数),它通常借用 BT.709 或 BT.2020 的矩阵。(也就是9),HDR+ 和 DV 也是 9

    0 vs.MATRIX_RGB RGB 用于表示内容已经是 RGB 格式,不需要 YUV<->RGB 转换。
    1 vs.MATRIX_BT709 Rec. ITU-R BT.709-6 绝大多数高清 (HD) SDR 内容。例如 1080p 的蓝光碟、网络流媒体等。
    2 vs.MATRIX_UNSPECIFIED Unspecified 未指定。VapourSynth 会默认当做 BT.709 处理,但这是一个信号,表明源信息可能不完整。
    3 (Reserved) (保留值) -
    4 vs.MATRIX_FCC FCC-73.682 美国 NTSC 模拟电视系统(1953年)。非常古老,基本不会遇到。
    5 vs.MATRIX_BT470_BG Rec. ITU-R BT.470-4 System B, G 欧洲 PAL/SECAM 标清 (SD) 模拟电视。用于处理旧的欧洲 DVD 或电视录像。
    6 vs.MATRIX_SMPTE170M SMPTE-170M (2004) 北美/日本 NTSC 标清 (SD) 数字电视和 DVD。与 BT.601 几乎等同。这是最常见的 SD 内容矩阵。
    7 vs.MATRIX_SMPTE240M SMPTE-240M (1999) 一种早期的、已被淘汰的 HD 标准。非常罕见。
    8 vs.MATRIX_YCGCO Y'Cg'Co' 一种计算效率更高的色彩空间,主要用于一些特定的编解码器(如 H.264 的无损模式)。不常见。
    9 vs.MATRIX_BT2020_NCL Rec. ITU-R BT.2020 (Non-Constant Luminance) 所有现代超高清 (UHD) 内容,包括 4K/8K 的 HDR10, HLG, Dolby Vision 以及 SDR 内容。这是 UHD 蓝光和流媒体的标准。
    10 vs.MATRIX_BT2020_CL Rec. ITU-R BT.2020 (Constant Luminance) BT.2020 的恒定亮度版本。主要用于专业制作和中间格式,消费级内容中几乎见不到。
    11 vs.MATRIX_SMPTE2085 SMPTE ST 2085 一种用于 HDR/WCG 的 Y'Dz'Dx' 色彩空间,与 Dolby Vision 的 ICtCp 类似,但应用不广。
    12 vs.MATRIX_CHROMA_NCL Chromaticity-derived NCL 基于色度推导的非恒定亮度矩阵。用于一些特殊场景,不常见。
    13 vs.MATRIX_CHROMA_CL Chromaticity-derived CL 基于色度推导的恒定亮度矩阵。不常见。
    14 vs.MATRIX_ICTCP Rec. ITU-R BT.2100-0 ICtCp Dolby Vision 和其他一些先进 HDR 系统使用的色彩空间。ICtCp 在感知均匀性上优于 Y'CbCr,能更高效地编码颜色。

    _Transfer 值列表

    1 BT.709 Rec.709 标准(SDR常用)
    2 Unspecified 未指定
    4 BT.470M 早期模拟制式
    5 BT.470BG 早期模拟制式
    6 BT.601 (525/625) NTSC/PAL/SD
    7 SMPTE 240M 早期HD
    8 Linear 线性光响应
    9 Logarithmic (100:1)
    10 Logarithmic (316.22777:1)
    11 IEC 61966-2-4 (xvYCC)
    12 BT.1361 Extended Colour Gamut
    13 sRGB (IEC 61966-2-1) 浏览器/桌面常用
    14 BT.2020 10-bit HDR
    15 BT.2020 12-bit HDR
    16 SMPTE ST 2084 (PQ) HDR PQ(HDR10/Dolby Vision)
    17 SMPTE ST 428-1 DCI
    18 ARIB STD-B67 (HLG) HLG(Hybrid Log-Gamma)

    _Primaries 值列表

    1 vs.PRIMARIES_BT709 Rec. ITU-R BT.709-6 所有高清 (HD) SDR 内容的标准。例如 1080p 蓝光、大多数网络流媒体SDR内容。也与 sRGB 色域几乎相同。
    2 vs.PRIMARIES_UNSPECIFIED Unspecified 未指定。VapourSynth 会默认当做 BT.709 处理,但这是一个需要注意的信号,表明源信息可能不完整。
    3 (Reserved) (保留值) -
    4 vs.PRIMARIES_BT470_M Rec. ITU-R BT.470-2 System M 用于 NTSC 制式的古老标清 (SD) 模拟电视。非常罕见。
    5 vs.PRIMARIES_BT470_BG Rec. ITU-R BT.470-4 System B, G 欧洲 PAL/SECAM 标清 (SD) 模拟电视。用于处理旧的欧洲 DVD 或电视录像。
    6 vs.PRIMARIES_SMPTE170M SMPTE-170M (BT.601) 所有标清 (SD) 数字内容,如 DVD、数字电视。这是最常见的 SD 内容色域。
    7 vs.PRIMARIES_SMPTE240M SMPTE-240M 一种早期的、已被淘汰的 HD 标准。非常罕见。
    8 vs.PRIMARIES_FILM Generic Film 通用胶片。主要用于一些胶片扫描的数字中间片。
    9 vs.PRIMARIES_BT2020 Rec. ITU-R BT.2020 超高清 (UHD) 内容的标准色域。所有 4K/8K 的 HDR10, HLG 内容都以此为目标色域。这是一个非常广的色域。
    10 vs.PRIMARIES_ST428 SMPTE ST 428-1 DCI-P3 (数字影院)。这是数字电影院放映的标准色域。它的白点是 D65。
    11 vs.PRIMARIES_ST431_2 SMPTE RP 431-2 DCI-P3 的另一种变体,主要用于校准。
    12 vs.PRIMARIES_ST432_1 SMPTE EG 432-1 Display P3。由苹果公司推广,是消费级电子设备 (iPhone, MacBook) 上的 "P3"。它使用 DCI-P3 的原色,但白点是 D65,与 BT.709 相同。 这是你正在处理的视频的核心属性。
    13 vs.PRIMARIES_EBU3213_E EBU Tech 3213-E JEDEC P22 色域,用于一些旧的 CRT 显示器。非常罕见。

    关于 Display P3

    如果你的 _Primaries 显示为 9,这说明视频文件自己携带的元数据标签是 BT.2020。_Primaries: 9 对应 vs.PRIMARIES_BT2020。
    视频的标签说它是 BT.2020,但实际内容是 Display P3。
    “BT.2020 容器” 概念
    这背后是行业普遍采用的一种做法,可以理解为 “BT.2020 容器”。
    BT.2020 色域 是一个大箱子。
    Display P3 色域 是一个放在大箱子里面的小一点的盒子。
    为了让所有的物流系统(播放器、电视、处理软件)都能轻松处理,内容制作者(比如苹果)会把他们的小盒子(Display P3 内容)放进标准的大箱子(BT.2020 容器)里,然后在箱子外面贴上“BT.2020”的标签。
    这样做的好处是兼容性。整个 UHD 生态系统都围绕 BT.2020 标准建立。如果直接发一个标着“Display P3”的特殊包裹,很多系统可能不知道如何处理。

    这里需要你手动改成 12

    打赏
    打赏提示信息
    分享
    分享提示信息