上一篇文章提到了 DaVinci Resolve 对于素材位置的计算逻辑非常奇怪并且不肯修改,这篇我试图概括一下具体的计算逻辑方便自己使用。如果你也遇到了同样的问题并且希望他们改进,可以去支持 我发的帖子(英语)。
计算基准
缩放/裁切/位置永远以原图大小作为基准,不会互相影响。
项目设置里有“缩放原图至适配大小且不出现裁切”和“不调整原图大小并裁切超出部分”两个比较合理的选项,“缩放原图至适配大小且不出现裁切”可以理解为插入时间线之前就改变了原图大小。例如画布尺寸 1920x1080,素材尺寸 512x512,选择“缩放原图至适配大小且不出现裁切”,相当于用外部命令把素材缩放到 1080x1080 然后再插入时间线,后续缩放/裁切/位置均以 1080x1080 作为基准。
缩放
缩放变换只计算原图大小。
缩放变换默认以素材中心作为基准。由于位置变换计算太复杂了,不考虑改变锚点参数的情况。
裁切
裁切只计算原图大小。无论素材的缩放变换参数是多少,都使用原图大小计算结果。
例:画布 1920x1080,素材 512x512。
- 选择“缩放原图至适配大小且不出现裁切”,此时原图大小是 1080x1080,左侧裁切 50% 应输入
1080 * 50% = 512
。 - 选择“不调整原图大小并裁切超出部分”,此时原图大小是 512x512,左侧裁切 50% 应输入
512 * 50% = 256
。
由于位置变换计算太复杂了,不考虑勾选“保留图片位置”的情况。
位置
位置变换只计算原图大小。无论素材的缩放变换参数和裁切参数是多少,都使用原图大小计算结果。
DaVinci Resolve 对于素材位置输入框使用特殊的计算逻辑(怀疑是 bug),假设画布宽度为 canvas_width
,画布高度为 canvas_height
,原图宽度为 clip_width
, 原图高度为 clip_height
,如果想将素材水平方向移动 x
像素,垂直方向移动 y
像素,则需要填入的数据需要按照 f(x) = x / clip_width * canvas_width
和 f(y) = y / clip_height * canvas_height
进行计算。注意,按此计算逻辑,填入的两个数据的比例显然和实际移动的像素比例不同。
例:画布 1920x1080,素材 512x512。
- 选择“缩放原图至适配大小且不出现裁切”,此时原图大小是 1080x1080,向左移动 540 像素应输入
540 / 1080 * 1920 = 960
。 - 选择“不调整原图大小并裁切超出部分”,此时原图大小是 512x512,向左移动 540 像素应输入
540 / 512 * 1920 = 2025
。