跳转到内容

LUT 调色流水线

将超分后视频统一质感的 ffmpeg、haldCLUT 和 Resolve ACES 流程整理成可执行手册。

超分后的视频想快速统一质感,可以先用 ffmpeg 批量套 3D LUT 生成观片版,再把需要最终交付的母带放进 DaVinci Resolve 的 ACES/OCIO 管线做逐镜头修正。

这条流水线的关键判断是:

  • 快速预览和批量统一:用 ffmpegzscale + lut3d
  • 对色彩空间更敏感的素材:加一个线性中间步,降低 LUT 套用时的色彩偏差。
  • 需要反复试风格:用 haldCLUT 做可视化迭代,再转回 .cube
  • 最终母带:进 Resolve,用 ACES/OCIO、节点和曲线处理肤色、高光、暗部层次和镜头匹配。
  • 动漫插帧:优先在统一色彩和质感后再插帧,减少前后帧色调不一致导致的闪烁。

交互式流程图入口:LUT 调色交互图

来源是一段关于“超分后的一键调色与质感统一”的 ChatGPT 分享内容。原内容偏命令和脚本清单,这里改写成长期可复用的判断流程:先用低成本命令行建立一致风格,再把高价值镜头交给专业调色管线做最后质量控制。

目标不是让所有素材都走最重的流程,而是在速度、保真度和人工成本之间分层:

素材整理
-> ffmpeg 快速 LUT 观片版
-> 线性中间步对照版
-> haldCLUT 风格迭代
-> Resolve ACES 母带修正
-> 插帧或最终编码
-> 10-30s 小样 A/B 验证

适合需要快速统一风格、批量导出观片版、低成本比较 LUT 效果的场景。

Terminal window
mkdir -p graded
for f in *.mp4; do
ffmpeg -y -i "$f" \
-vf "zscale=transfer=bt709:primaries=bt709:matrix=bt709,\
lut3d=file='my-grade.cube':interp=trilinear,\
format=yuv420p" \
-c:v libx264 -crf 18 -preset slow \
"graded/${f%.*}-lut.mp4"
done

这里的职责分工是:

  • zscale:显式声明输入和输出的传递函数、色域和矩阵,减少播放器或滤镜链路的隐式猜测。
  • lut3d:应用 .cube 风格 LUT。
  • format=yuv420p:提高普通播放器和平台兼容性。
  • -crf 18:适合作为高质量观片版;如果要检查细节,可以临时改到 14-16 或导出 ProRes/DNxHR。

如果 LUT 对高光、肤色或暗部层次影响过强,可以在 BT.709 和 LUT 之间加入线性中间步。它不是完整 ACES,但更接近“先到工作空间再套风格”的思路。

Terminal window
ffmpeg -y -i input.mp4 \
-vf "zscale=primaries=bt709:transfer=bt709:matrix=bt709,\
zscale=transfer=linear,\
lut3d=file='my-grade.cube':interp=trilinear,\
zscale=transfer=bt709,\
format=yuv420p" \
-c:v libx264 -crf 18 -preset slow \
output-linear-lut.mp4

这一步适合和快速版同时导出,用同一段 10-30 秒小样做 A/B。只要线性版在高光、肤色或暗部细节上更稳定,就可以把它作为批处理默认路径。

haldCLUT 的价值是把 LUT 变成可视化图片来调。做法是生成一张左侧为 hald 图、右侧为视频参考帧的拼图,然后在 Photoshop、Krita 或其他图像工具里调色,最后再把修改后的 hald 转回 .cube

Terminal window
ffmpeg -f lavfi -i haldclutsrc=8 \
-ss 00:00:04 -i input.mp4 \
-frames:v 1 \
-filter_complex "[1:v]scale=512:-1[ref];[0:v][ref]hstack" \
hald-preview.png

建议用包含阴影、高光和肤色的帧做参考。动漫素材也要选一帧有暗部边缘和高饱和区域的画面,否则 LUT 很容易只在单一场景里看起来正常。

完成图片调色后,用 hald2cube 或同类工具把编辑结果转为 .cube,再回到 ffmpeg 批处理链路测试。

Resolve 适合最终交付前处理这些问题:

  • 高光 roll-off 太硬。
  • 暗部层次被 LUT 压死。
  • 肤色或角色主色偏移。
  • 多个镜头之间风格不一致。
  • HDR、宽色域或高码率母带需要更严谨的色彩管理。

Python 脚本可以作为批量套 LUT 的骨架,但最终仍建议保留人工抽检和关键镜头节点修正。

import DaVinciResolveScript as dvr
resolve = dvr.scriptapp("Resolve")
project_manager = resolve.GetProjectManager()
project = project_manager.GetCurrentProject()
timeline = project.GetCurrentTimeline()
clips = timeline.GetItemListInTrack("Video", 1)
for clip in clips:
try:
clip.SetNodeLUT(1, "/absolute/path/to/my-grade.cube")
except Exception:
pass
project.SetRenderSettings(
{
"TargetDir": "/tmp/graded-renders",
"CustomName": "graded-batch",
"FormatWidth": 1920,
"FormatHeight": 1080,
"VideoCodec": "H264",
}
)
project.AddRenderJob(timeline)
project.StartRendering()

动漫素材常见需求是“超分 + 插帧 + 调色”。如果目标是插帧和时序稳定,默认顺序建议是先超分,再插帧和运动补偿降噪,最后调色。

原因很直接:插帧模型会根据相邻帧估计运动。强 LUT、局部对比、锐化或降噪可能改变边缘和亮度关系,让光流更难稳定。更完整的插帧处理顺序见 插帧与时序稳定

可以保留两个例外:

  • 小样阶段可以先套轻量 LUT 预览最终风格,但不要把它作为插帧输入的唯一版本。
  • 如果素材需要重度降噪或边缘清理,先做基础修复,再进入 LUT 和插帧。

每次换 LUT、素材类型或插帧工具前,先取一段 10-30 秒小样,至少包含阴影、高光、角色主体和快速运动。

建议同时导出三版:

  1. 原片 -> ffmpeg + LUT
  2. 原片 -> ffmpeg + 线性中间步 + LUT
  3. 原片 -> Resolve ACES 管线。

记录这些指标:

  • 主观观感:肤色、主色、暗部层次、高光过渡、边缘干净度。
  • 客观指标:SSIM 或近似 Delta E,只作为辅助判断。
  • 成本:渲染时长、显存占用、人工微调时间。

最后用“质量收益 / 时间成本”决定默认路径,而不是默认把所有素材都送进最重的流程。

  • .cube 与素材色彩空间不匹配:在进出链路都用 zscale 显式声明 transferprimariesmatrix
  • 观片版发灰:先确认是否编码码率太低,再比较 -crf 14-16、ProRes 或 DNxHR 输出。
  • 高光被 LUT 扣顶:在 Resolve 里用曲线或胶片曲线做 soft roll-off;命令行临时测试可以先轻微 tonemaptweak
  • 批处理结果和播放器显示不一致:检查色彩标签、播放器色彩管理和导出容器元数据。
  • 插帧后闪烁:先确认插帧前后是否发生色调变化,再决定 LUT 放在插帧前还是插帧后。
  • 把这套流程扩展成一键脚本:小样截取、三版对照、LUT 批处理、结果目录整理。
  • 为常用动漫素材整理一组默认 ffmpeg 参数和 Resolve 项目模板。
  • 评估 hald-preview.png.cube 的本地转换工具,固化到脚本里。