找回密码
 立即注册
查看: 145|回复: 0

【DE_RGBSHIT】用于mpv的反rgb位移的vs脚本

  • TA的每日心情
    无聊
    2023-9-11 16:08
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    7

    主题

    76

    回帖

    0

    VC币

    注册会员

    Rank: 2

    积分
    864
    zdrzdr 发表于 7 天前 | 显示全部楼层 |阅读模式
    为什么要做这个东西就不赘述了,和ai合作写了这个东西,能一定程度反制rgbshift滤镜。
    性能问题大概不会很多,如果有代码上的问题欢迎指正。

    1. import vapoursynth as vs
    2. from vapoursynth import core

    3. core = vs.core
    4. clip = video_in

    5. # ====== 配置参数 ======
    6. SHIFT_X = -1.0    # 水平位移量(正数=右移)
    7. SHIFT_Y = -0.5    # 垂直位移量(正数=下移,负数=上移)

    8. # ====== RGB处理流程 ======
    9. # 转换为 RGB 格式(假设输入为 BT.709)
    10. rgb = core.resize.Bilinear(
    11.     clip,
    12.     format=vs.RGBS,
    13.     matrix_in_s="709" if clip.format.color_family == vs.YUV else "rgb"
    14. )

    15. # 分离 RGB 通道
    16. r, g, b = core.std.SplitPlanes(rgb)

    17. # ====== 蓝色通道位移处理 ======
    18. # 水平+垂直联合位移
    19. shifted_b = core.resize.Bilinear(
    20.     b,
    21.     src_left   = -SHIFT_X,          # 右移1像素(负值=向右采样)
    22.     src_top    = -abs(SHIFT_Y),     # 上移0.5像素(负值=向上采样)
    23.     src_width  = b.width + SHIFT_X, # 扩展采样区域
    24.     src_height = b.height + abs(SHIFT_Y),
    25.     width      = b.width,           # 输出尺寸不变
    26.     height     = b.height,
    27.     filter_param_a=0, filter_param_b=0.5  # 最近邻插值
    28. )

    29. # ====== 重组通道 ======
    30. shifted_clip = core.std.ShufflePlanes(
    31.     clips=[r, g, shifted_b],
    32.     planes=[0, 0, 0],
    33.     colorfamily=vs.RGB
    34. )

    35. # ====== 转回YUV格式 ======
    36. yuv_clip = core.resize.Bicubic(
    37.     shifted_clip,
    38.     format=vs.YUV420P10,
    39.     matrix_s="709",
    40.     dither_type="error_diffusion"
    41. )

    42. yuv_clip.set_output()
    复制代码



    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表