绿幕抠图算法为什么必须使用高分辨率与高精度浮点计算一、引言绿幕抠图Chroma Keying是影视制作、直播、视频会议等场景中最常用的前景提取技术。其基本原理是利用前景主体与纯色背景通常为绿色或蓝色之间的色彩差异计算出每个像素的透明度Alpha 值从而将前景从背景中分离出来。原理看似简单但在工业实践中抠图质量的优劣往往取决于两个容易被忽视的因素素材的空间分辨率和算法管线的数值精度。低分辨率、低精度的处理流程在人物轮廓的实心区域或许看不出差异但在头发丝、烟雾、薄纱、毛发边缘等半透明区域会导致灾难性的画质崩塌——断层、锯齿、波浪纹、色块跳动等瑕疵接踵而至。本文将从物理成像、数值分析、编码原理三个维度系统阐述为什么抠图必须使用高分辨率素材为什么算法开发不能用 8 位整数而应使用 16 位浮点FP16或 32 位浮点FP32为什么抠图后的画面应当在算法管线内直接叠加背景为什么不能将抠图结果导出为 MOV 等带透明通道的视频文件。二、为什么需要高分辨率2.1 半透明区域的物理本质当我们拍摄一个站在绿幕前的人物时人物的躯干、面部等区域与绿色背景有清晰的边界——这些像素要么完全是前景要么完全是背景Alpha 非 0 即 1处理起来相对简单。但真正决定抠图质量的是那些介于前景与背景之间的半透明区域头发丝单根发丝的直径约 50~100 微米在传感器上可能只覆盖像素面积的一小部分烟雾、水汽本身就是半透明介质光线穿透后与背景色混合薄纱、网状织物纤维之间有大量间隙一个像素内同时包含纤维和背景运动模糊快速运动的肢体边缘在曝光时间内扫过多个位置形成渐变的半透明带。这些区域的 Alpha 值不是 0 或 1而是介于两者之间的连续渐变。准确还原这些渐变是高质量抠图的核心挑战。2.2 分辨率如何影响半透明区域以一根头发丝为例假设其在画面中的物理宽度为 2 像素宽在传感器投影上4K 分辨率3840×2160下一根头发丝可能横跨 3~5 个像素。从发丝中心到边缘Alpha 值呈现1.0 → 0.8 → 0.4 → 0.1 → 0.0的渐变过渡。算法有足够多的采样点来描述这条渐变曲线提取出来的 Matte 边缘自然、柔和。720p 分辨率1280×720下同一根头发丝可能只占据 1 个像素。这个像素的颜色是发丝颜色与绿色背景的混合值其 Alpha 只有一个笼统的中间值比如 0.5。发丝边缘没有渐变过渡直接从有跳到无。多根头发丝在低分辨率下相互混叠算法根本无法区分哪些是发丝、哪些是背景噪声。直观类比这就像用粗网格去描摹一条细腻的曲线——网格越粗曲线越失真。高分辨率提供的是更密的采样点让半透明区域的 Alpha 渐变有足够的像素来承载。2.3 量化对比指标4K3840×21601080p1920×1080720p1280×720总像素数约 830 万约 207 万约 92 万单根发丝占据像素3~5 px1~2 px0.5~1 px半透明边缘可用渐变级数充足勉强几乎无法表达适合抠图是基本可用不推荐结论高分辨率的本质意义不在于画面更清晰而在于为半透明区域提供了足够多的像素来承载 Alpha 的连续渐变。三、为什么 8 位精度不够即便使用了 4K 高分辨率素材如果算法管线内部使用 8 位整数uint8做计算半透明区域的质量仍然会被严重破坏。3.1 8 位的量化灾难8 位无符号整数的值域为 0~255共 256 个离散级别。当我们用它表示 0.0~1.0 的 Alpha 值时每一级对应的步长为1/255 ≈ 0.00392两个相邻可表示值之间的间隔约为0.4%这看起来似乎精度尚可但问题出在半透明区域的 Alpha 值分布极度集中在接近 0 和接近 1 的窄带内。以头发边缘为例从完全不透明到完全透明的过渡可能只发生在 Alpha 0.0 到 0.10 的范围内。在 8 位下Alpha 0.00 → uint8: 0 Alpha 0.01 → uint8: 3 实际 0.01×2552.55四舍五入为 3 Alpha 0.02 → uint8: 5 实际 0.02×2555.1 Alpha 0.03 → uint8: 8 实际 0.03×2557.65 Alpha 0.04 → uint8: 10 Alpha 0.05 → uint8: 13 ... Alpha 0.10 → uint8: 26从 Alpha 0.00 到 0.10 的整个半透明渐变范围8 位只能提供26 个离散级别。而在实际场景中这个渐变范围内可能需要区分上百种不同的透明度。更糟的是Alpha 0.012和Alpha 0.016都会被映射为uint8: 3即3/255 ≈ 0.01176精度丢失约30%Alpha 0.006和Alpha 0.009都会被映射为uint8: 2即2/255 ≈ 0.00784两个本应不同的透明度被合并为同一个值3.2 断层效应Banding当连续渐变的 Alpha 值被量化为少数几个离散级别时视觉上会出现明显的阶梯状色带——术语叫做断层或Banding。想象一排从左到右透明度逐渐增加的头发边缘像素。在 FP32 下Alpha 可能是0.001, 0.003, 0.006, 0.010, 0.015, 0.021, 0.028, 0.036, 0.045, 0.055 ...这是一条平滑的渐变曲线。但在 8 位下它们被量化为0, 1, 2, 3, 4, 5, 7, 9, 11, 14 ...uint8 值由于 uint8 只能取整数连续的渐变被切割成一块块的台阶。在最终合成画面上这些台阶表现为断层/色带半透明区域不是平滑过渡而是一条条明显的分界线锯齿头发边缘不是柔和消融而是呈现粗糙的锯齿状波浪纹Moiré当多根头发丝的量化误差形成规律性图案时会产生原本不存在的干涉条纹颗粒跳动在视频中由于每帧的微小运动导致量化结果在两个相邻整数之间跳动半透明区域出现闪烁3.3 计算误差的累积绿幕抠图算法绝不是一步完成的典型的处理流程包括色彩空间转换RGB → YCbCr 或 RGB → HSV色差计算计算每个像素与绿色基准值的距离Alpha 提取根据色差计算透明度溢出校正Spill Suppression消除前景上的绿色反光边缘优化对 Alpha Matte 做形态学处理或模糊Alpha-Background 合成用 Alpha 把前景叠加到新背景上在 8 位整数管线中每一步运算都会产生截断误差。例如两个 uint8 值相乘后的结果需要从 16 位截回 8 位小数部分被直接丢弃。经过 4~6 步串联运算后累积的截断误差可能达到原始值的 5%~10%——对于半透明区域那些微小的 Alpha 值来说这是致命的偏差。3.4 FP16 / FP32 的优势IEEE 754 半精度浮点数FP16和单精度浮点数FP32则完全不同特性uint8FP16FP32可表示的值的数量25665,536约 42 亿有效数字约 2.4 位约 3.3 位11-bit 尾数约 7.2 位23-bit 尾数[0, 0.1] 区间内的可用级数26约 6,400约 1.07 亿最小正值1/255 ≈ 0.00392≈ 5.96×10⁻⁸≈ 1.18×10⁻³⁸浮点数的关键优势在于其非均匀分布特性越接近 0 的区域可表示的值越密集。这恰好与半透明区域的需求完美匹配——Alpha 在 0.001~0.05 的范围内FP16 可以提供数千个不同的值而 uint8 只有十几个。以 FP32 为例Alpha 0.012和Alpha 0.016在 FP32 下是两个完全不同的值精度差约 0.03%。而在 uint8 下它们都是 3无法区分。此外FP16/FP32 在中间计算过程中不需要做截断取整乘除运算的精度损失极小FP32 每次运算的相对误差约 10⁻⁷经过 6 步串联运算后累积误差仍可忽略不计。一句话总结8 位整数用均匀分布的 256 级去覆盖整个 [0, 1] 范围在半透明关键区域严重供给不足浮点数用非均匀分布的海量精度天然聚焦于接近 0 的区域完美契合抠图算法的需求。四、为什么抠图后必须直接叠加背景很多人以为抠图的目标是提取出一个干净的前景 Alpha 通道然后在后续流程中再去合成背景。这种理解在理论上没错但在工程实践中抠图后应当在同一个高精度管线内立即完成背景合成原因有三。4.1 预乘 AlphaPremultiplied Alpha的本质高质量抠图算法的输出通常是预乘 Alpha格式输出颜色 原始前景色 × Alpha也就是说输出的 RGB 值已经乘以了 Alpha。一个 Alpha 0.1 的红色像素 (255, 0, 0)在预乘后变为 (25.5, 0, 0)。预乘 Alpha 的好处是合成公式极其简洁高效Result Fg_premultiplied Bg × (1 - Alpha)但问题在于如果不立即合成而是把预乘后的 RGBA 存下来那些半透明像素的 RGB 值极小因为乘了一个很小的 Alpha在后续的任何量化或有损处理中这些微小值极易被吞噬为零——前景信息就永久丢失了。4.2 存储中间结果的精度损失如果你决定先存抠图结果以后再合成那么就必须将 Alpha Matte 和前景色存储到某种文件格式中。此时会面临存为 8 位 PNG/TIFFAlpha 精度从 FP32 的 ~10⁻⁷ 直接降为 ~0.004半透明区域的渐变被量化为台阶存为 16 位 PNG/TIFF精度好得多~1.5×10⁻⁵但文件体积翻倍且仍是均匀量化存为 FP16/FP32 EXR精度无损但这已经是专业工作流而非导出为普通视频的场景关键在于合成公式Result Fg × Alpha Bg × (1 - Alpha)中Alpha 的微小偏差会被放大到最终像素值上。假设背景是白色 (255, 255, 255)Alpha 精确值 0.020 Alpha 8-bit值 5/255 ≈ 0.01961 Bg 贡献 (精确) 255 × (1 - 0.020) 249.90 Bg 贡献 (8-bit) 255 × (1 - 0.01961) 250.00 差异 0.10 per channel单个像素差 0.1 看似微不足道但当数百个半透明边缘像素都存在这种系统性偏差时合成后的画面会在前景边缘呈现一圈可见的色差晕边。4.3 绿色溢出校正依赖背景色绿幕拍摄时绿色灯光不可避免地会在人物的皮肤、衣服、头发上产生绿色反光——这叫做绿色溢出Green Spill。溢出校正算法需要用一种颜色去替换那些多余的绿色分量。如果在合成之前就做溢出校正算法不知道最终的背景是什么颜色只能简单地从绿色通道中减去溢出量。这会导致皮肤偏品红绿色被过度抑制头发偏暗绿色分量被减去后亮度降低半透明区域出现不自然的颜色断裂但如果在合成管线内同时进行溢出校正算法可以用实际的背景颜色来替代溢出的绿色。比如如果背景是蓝天那么头发边缘溢出的绿色可以被蓝色合理补偿视觉上自然得多。一句话总结在高精度浮点管线中一步完成抠图 → 溢出校正 → 合成可以同时避免精度损失和颜色偏移这是工业级抠图的标准做法。五、为什么不能将抠图结果导出为 MOV 等透明视频格式很多从业者的工作流是这样的用绿幕拍摄素材 → 抠图处理 → 导出为带 Alpha 通道的 MOV如 ProRes 4444或 WebM → 在另一个项目中导入再叠加背景这个流程看似保留了透明通道后续可以灵活合成实际上每一步都在不可逆地摧毁画质。让我们逐层分析。5.1 第一重损失FP32 → 8-bit/10-bit/12-bit 截断算法管线内部以 FP32 精度维护 Alpha 和颜色数据。当导出为视频文件时必须将数据交给视频编码器。此时面临一个根本性的矛盾FP32 在 [0, 1] 范围内有约10 亿个可区分的值8-bit 编码只有256级10-bit 编码如 ProRes 4444只有1024级12-bit 编码只有4096级即便是最高规格的 12-bit ProRes 4444其精度也只有 FP32 的约0.0004%。在半透明关键区域 [0, 0.10]精度可区分级数相邻两级间距FP32~1 亿~10⁻⁹12-bit4100.00024410-bit1020.0009778-bit260.00392一旦 FP32 的精细渐变被截断为几百个台阶头发丝、烟雾边缘的平滑过渡就变成了肉眼可见的阶梯断层。这一步的损失是不可逆的——后续无论做什么处理都无法恢复被丢弃的精度。5.2 第二重损失有损视频编码的破坏截断后的数据还要经过视频编码器的进一步压缩。要理解这一步为什么特别致命我们需要了解现代视频编码的核心原理。5.2.1 色度子采样Chroma Subsampling人眼对亮度变化的敏感度远高于色度变化。主流视频编码格式利用这一点对色度颜色信息做降采样以节省码率4:4:4色度与亮度保持相同分辨率无损色度但码率最高4:2:2色度水平分辨率减半色度信息量为 4:4:4 的 2/34:2:0色度水平和垂直分辨率均减半色度信息量仅为 4:4:4 的 1/2H.264、H.265、VP9 等主流编码格式默认使用4:2:0意味着每 4 个像素共享一组色度值。对于绿幕抠图后的半透明边缘原本相邻的 4 个像素可能分别有不同的半透明色彩前景色与背景绿色混合程度不同4:2:0 下这 4 个像素被迫共享同一组色度值半透明边缘的颜色过渡被模糊化精密的色彩渐变丢失即使选择 4:4:4 采样后续的变换量化环节仍然会造成不可逆损伤。5.2.2 DCT 变换与量化——有损编码的核心这是视频编码中信息丢失的根源值得详细说明。第一步分块编码器将每帧图像分成若干个小块通常是 8×8 或更大的宏块。Alpha 通道也被同样切块处理。第二步离散余弦变换DCT对每个 8×8 块执行二维 DCT将空间域的像素值变换到频率域。变换后得到 64 个系数左上角的系数DC 系数代表整块的平均值其余系数AC 系数代表不同频率的细节信息越靠右下角的系数代表越高频的变化半透明区域的 Alpha 渐变——从 0 到 0.05 的细微过渡——在频率域中恰好表现为高频分量。第三步量化关键有损步骤编码器用一个量化矩阵QMatrix去除以每个 DCT 系数然后取整量化后系数 round(DCT系数 / QMatrix对应值)量化矩阵的设计原则是高频系数对应更大的量化步长除以更大的数因为人眼对高频细节不敏感。但对 Alpha 通道来说那些高频细节恰恰是半透明边缘的精密渐变。量化会导致大量高频系数被量化为 0——渐变信息被直接抹除幸存的系数精度大幅降低——渐变被粗糙化逆变换后原本平滑的 Alpha 边缘出现振铃效应Ringing Artifact在边缘两侧产生本不存在的波纹同一块内的 64 个像素被拉平产生块效应Blocking Artifact相邻块的 Alpha 值在边界处出现突变第四步可视化理解假设一个 8×8 的 Alpha 块原始值从左到右平滑渐变0.00 → 0.08原始: 0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 ... 量化后: 0.00 0.00 0.02 0.02 0.04 0.04 0.06 0.06 0.08 ...阶梯化 振铃: 边缘可能出现 -0.01 或 0.09 的过冲平滑的渐变被量化为若干台阶且在台阶边缘产生过冲——这就是视频编码对 Alpha 通道造成的损伤。5.2.3 帧间预测与运动补偿视频编码不仅在空间上压缩还利用帧间的时间冗余I 帧关键帧独立编码质量最高P 帧预测帧参考前面的帧只编码差异B 帧双向预测帧参考前后帧编码差异对于半透明区域如随风飘动的头发丝帧间变化非常微小但极其精密——每帧的 Alpha 渐变位置略有偏移。运动补偿算法试图用整块位移 残差来描述这种变化但半透明区域的变化模式不符合刚性块运动的假设运动矢量只能精确到半像素或四分之一像素无法捕捉亚像素级的 Alpha 渐变位移残差本身又要经过 DCT 量化的有损处理最终结果是半透明区域在视频播放时逐帧闪烁和跳动即使原始抠图结果是完美平滑的。5.3 第三重损失解码时的再次舍入当你在后续项目中导入这段带 Alpha 通道的 MOV 视频时解码器需要执行逆量化恢复系数 量化后系数 × QMatrix对应值执行逆 DCT将频率域变回空间域进行运动补偿重建P/B帧将浮点中间值截断为 8-bit/10-bit 输出每一步都引入舍入误差。逆量化不可能恢复被量化截断的信息round(x/Q) × Q ≠ x逆 DCT 的浮点运算也会引入微小偏差。这些误差在多步累积后使得解码输出与原始值之间的差异远大于单次量化的误差。5.4 精度退化链路总览算法管线内 Alpha 0.0237FP32 精确值 ↓ 第一重截断为 8-bit 编码输入 Alpha ≈ 6/255 0.02353误差 0.7% ↓ 第二重DCT 量化 编码后 Alpha频域量化部分高频信息丢失 ↓ 第三重解码舍入 解码输出 Alpha ≈ 0.027 或 0.020误差可达 15%~25%原本精度为0.0001级别的 Alpha 值经过整条链路后精度退化到0.005~0.01级别——衰减了 50~100 倍。对于半透明关键区域这意味着头发边缘从平滑渐变变为粗糙锯齿烟雾从柔和弥散变为断裂色块薄纱从朦胧半透明变为有/无的二值边缘视频播放时半透明区域逐帧闪烁这些损伤是不可逆的。后续无论使用多么精密的合成算法都无法从被摧毁的 Alpha 数据中恢复出原始的渐变信息。六、数学推导与直观示例6.1 合成公式中 Alpha 精度的影响标准 Alpha 合成公式Over 操作R_out R_fg × α R_bg × (1 - α) G_out G_fg × α G_bg × (1 - α) B_out B_fg × α B_bg × (1 - α)假设一个头发边缘像素前景色 (R_fg, G_fg, B_fg) (45, 30, 20)深棕色发丝背景色 (R_bg, G_bg, B_bg) (135, 200, 235)蓝天精确 Alpha 0.020非常细的一缕发丝几乎透明FP32 精确计算R_out 45 × 0.020 135 × 0.980 0.900 132.300 133.200 G_out 30 × 0.020 200 × 0.980 0.600 196.000 196.600 B_out 20 × 0.020 235 × 0.980 0.400 230.300 230.700输出 ≈ (133.2, 196.6, 230.7) —— 蓝天中隐约可见一缕深色发丝痕迹。8-bit Alphaα 被量化为 5/255 ≈ 0.01961R_out 45 × 0.01961 135 × 0.98039 0.882 132.353 133.235 G_out 30 × 0.01961 200 × 0.98039 0.588 196.078 196.666 B_out 20 × 0.01961 235 × 0.98039 0.392 230.392 230.784输出 ≈ (133.2, 196.7, 230.8) —— 单个像素的差异约 0.1看似微不足道。但问题出在相邻像素。在 FP32 下相邻像素的 Alpha 可能是0.018, 0.019, 0.020, 0.021, 0.022这是一条平滑渐变。但在 8-bit 下5/255, 5/255, 5/255, 5/255, 6/255 即 0.01961, 0.01961, 0.01961, 0.01961, 0.02353前四个像素完全相同第五个突然跳变——这就是断层。当这种跳变沿着头发边缘排列成线时就形成了肉眼可见的阶梯锯齿。6.2 浮点数为何在 [0, 0.1] 区间精度远高于 8-bitIEEE 754 浮点数采用(-1)^s × 1.mantissa × 2^exponent的表示形式。关键特性是指数部分使得浮点数在接近 0 的区域相邻可表示值之间的间距极小。以 FP32 为例在 [0.0625, 0.125) 区间指数 -4相邻值间距 ≈ 7.45 × 10⁻⁹在 [0.03125, 0.0625) 区间指数 -5相邻值间距 ≈ 3.73 × 10⁻⁹在 [0.015625, 0.03125) 区间指数 -6相邻值间距 ≈ 1.86 × 10⁻⁹而 uint8 在整个 [0, 1] 范围内间距恒定为 1/255 ≈ 3.92 × 10⁻³。在 Alpha 0.02 附近FP32 的相邻值间距 ≈1.86 × 10⁻⁹约 20 亿分之一uint8 的相邻值间距 ≈3.92 × 10⁻³约 256 分之一FP32 在这个区域的精度是 uint8 的约 200 万倍。6.3 视频编码往返后的 Alpha 偏移假设原始 Alpha 0.0237FP32经过视频编码-解码往返Step 1 — 截断为 8-bit0.0237 × 255 6.04 → round 6 恢复值 6 / 255 0.02353 误差 |0.0237 - 0.02353| 0.00017相对误差 0.7%Step 2 — DCT 量化假设 QP28典型中等质量该像素所在 8×8 块的 DCT 系数被量化 高频分量丢失后空间域的 Alpha 值被平均化 假设量化后恢复值变为 0.024 额外误差 |0.02353 - 0.024| 0.00047Step 3 — 解码输出截断解码器逆 DCT 输出 0.0243 截断为 8-bit: round(0.0243 × 255) round(6.20) 6 最终值 6/255 0.02353 但相邻像素可能从 0.0231 变为 round(0.0231×255)6/2550.02353 两个原本不同的像素变成了完全相同的值——空间细节丢失总误差链路原始值: 0.0237 编码-解码后: 0.02353 绝对误差: 0.00017 相对误差: 0.7% 但在最坏情况下块边界 高压缩率 原始值: 0.0237 编码-解码后: 0.031 或 0.016 绝对误差: 0.007~0.008 相对误差: 30%~35%对于一个几乎透明的半透明像素来说30% 的 Alpha 偏差意味着原本隐约可见的一缕头发痕迹变成了完全不可见被截为 0或者过于明显被提升为 0.03在画面上产生可见瑕疵。七、工程实践建议基于以上分析以下是绿幕抠图工程实践中的关键准则7.1 采集端使用4K3840×2160或更高分辨率拍摄为半透明区域提供足够的像素采样摄像机输出选择10-bit 或 12-bit色深如 ProRes 422 HQ、RAW 格式避免在源头就损失精度绿幕布光要均匀减少背景亮度不一致带来的额外算法负担7.2 算法管线全程使用FP16 或 FP32处理所有中间数据即使输入源是 8-bit/10-bit 整数也应在管线入口立即转换为浮点所有运算在浮点域进行GPU 加速时优先使用 FP16大多数现代 GPU 对 FP16 有专门的吞吐优化精度要求极高的环节使用 FP327.3 合成流程抠图 → 溢出校正 → 叠加背景三步必须在同一个浮点管线中一次完成绝不将带 Alpha 的中间结果导出为 8-bit 有损视频格式H.264/H.265 MOV、VP9 WebM 等如果确实需要存储中间结果例如跨团队协作使用OpenEXR 序列帧支持 FP16/FP32 逐帧无损存储而非视频编码格式最终输出已合成好背景、不再需要 Alpha 通道的成片时才进行精度降级和视频编码7.4 常见错误工作流 vs 正确工作流错误流程拍摄(8-bit) → 抠图(uint8) → 导出Alpha视频(8-bit MOV) → 导入后期软件 → 叠加背景 ↑ 精度不足 ↑ 量化严重 ↑ 编码再损 ↑ 解码再损 ↑ 为时已晚正确流程拍摄(10/12-bit) → 导入管线(转FP32) → 抠图(FP32) → 溢出校正(FP32) → 叠加背景(FP32) → 输出成片(8-bit) ↑ 全程高精度一步到位 ↑ 最后一步才降精度注意最终的 8-bit 输出完全没有问题——因为此时画面已经合成完毕不再包含需要精密表达的 Alpha 通道RGB 三通道的 256 级足以满足人眼对成片画面的分辨需求。八、总结绿幕抠图看似是一个把绿色去掉的简单操作但要做到专业级的品质每一个技术环节都不容马虎高分辨率不是为了看起来更清楚而是为了让头发丝、烟雾等半透明区域有足够多的像素来承载 Alpha 的连续渐变。分辨率不够再精密的算法也无米下炊。FP16/FP32 浮点精度不是奢侈的过度工程而是半透明区域的刚性需求。8-bit 的 256 级量化在 Alpha 接近 0 的关键区域严重不足导致断层、锯齿和波浪纹。浮点数的非均匀分布天然契合这一需求——越接近 0精度越高。抠图后直接合成背景不是偷懒而是避免精度损失的唯一正确做法。把 Alpha 通道从高精度管线中导出来再导入每经过一次量化或编码-解码往返精度都会不可逆地衰减。不要导出为带 Alpha 的有损视频。FP32 → 8-bit 截断 → DCT 量化 → 帧间预测 → 解码舍入这条链路会将半透明区域的精度摧毁殆尽。如果必须存储中间结果请使用 EXR 序列帧。这些原则的底层逻辑其实只有一句话半透明区域的精度极其脆弱任何一次不必要的量化都是不可逆的伤害——所以要用最高的精度拍摄、最高的精度计算、一步到位地完成合成只在最终成片时才降级输出。