AI funscript 生成的原理

AutoScript Sync 用完全在你电脑上运行的 AI 视频动作追踪从视频中读取动作:它对帧进行采样,用光流测量运动,加入可选的姿态和深度模型,把这些信号融合成一条位置轨迹,并在每次方向变化处放置一个脚本点。结果是一个保存在视频旁边的标准 .funscript。针对特定设备的适配发生在之后,而且只作用于发送给该设备的副本。

已于 2026 年 9 月 21 日对照应用代码核实。除非某行另有说明,描述的都是已发布的应用 2.121.1。

处理流程:从视频文件到设备

AutoScript Sync analysis pipeline Decode, sample every Nth frame at 320 pixels, find the moving region, measure it with DIS optical flow plus optional pose and depth and background motion-vector and audio passes, fuse in a Kalman smoother, label 2-second motion-type windows, place points at reversals, save the funscript, then fit a copy to the device. Decode the video (hardware decoding first, software fallback) Sample every 4th / 3rd / 2nd frame (Fast / Balanced / High), shrink to 320 px Find the moving region (motion heatmap, or the box you draw) DIS optical flow YOLOv8-pose MiDaS depth Motion vectors Fuse into one position trace (Kalman/RTS smoother) Label 2-second windows by motion type Points at direction changes → .funscript saved beside the video Fit a copy to the connected device (speed, spacing, point density) always on optional optional + audio envelope, background passes
保存的文件止于最后一个实线箭头。虚线步骤只作用于应用发送给设备的副本;磁盘上的文件从不会针对某一台设备做适配。

每个阶段一段说明

解码与采样

视频通过 OpenCV 的 FFmpeg 后端解码。应用会先请求硬件解码,如果编解码器、构建版本或驱动不支持,就退回软件解码。一个工作线程会提前解码到最多 64 帧的缓冲区,让解码和 AI 推理同时进行,而不是轮流进行。

Accuracy 设置决定分析多少帧:Fast 每 4 帧取 1 帧,Balanced(默认)每 3 帧取 1 帧,High 每 2 帧取 1 帧。对于 30 fps 的视频,就是每秒 7.5、10 或 15 次采样;对于 60 fps 的视频,频率翻倍。无论源分辨率多少,每个采样帧在分析前都会缩小到 320 px 宽。VR 画面会先还原为单眼的普通透视视图。

找到运动区域

除非你自己用 Set Motion Region… 或 Live Track 画出一个框,否则引擎会构建一张运动热力图,取其中最热的连通区域,并向外扩展 15%。光流和深度都在该区域内测量。

测量运动

光流是唯一始终运行的信号:DIS 稠密光流测量该区域在各采样帧之间的移动。YOLOv8 姿态估计为每个人加入 17 个身体关键点,MiDaS 深度估计则补上平面视频所隐藏的朝向/远离镜头的轴。这两个模型都是可选的;没有它们时,引擎只靠光流运行,并会明确告知。应用还会在后台线程中读取编解码器自身的运动矢量和 50 Hz 的音频响度包络,所用时间预算随影片长度而定。

融合

光流给出的是速度,随时间累加会产生漂移。因此引擎会根据区域中心、姿态和深度为每个视频选出一个锚点,再由 Kalman/RTS 平滑器把积分后的光流与该锚点融合成一条位置轨迹。默认情况下,锚点是所有可读通道的逐样本混合,只有当它的得分不低于单一选中锚点时才会采用。追踪中断的地方,会用延续周围行程的节律性动作补齐,补填而非实测的比例会写入脚本的元数据。

动作类型窗口

时间轴被切分为 2 秒的窗口。一个小型分类器根据六项运动特征为每个窗口标注动作类型,平滑处理则防止标签在相邻窗口之间来回跳变。标签决定该窗口动作的塑形方式。你自己设置的标签只要覆盖窗口的至少一半,就会在该窗口上优先于分类器。

脚本点与保存的文件

脚本点放在每次运动反转处,与前一个点的间隔不少于 120 ms,并且至少每 4 秒一个,随后点列表会被简化。应用会先把已有脚本复制为 .funscript.bak,再在视频旁写出同名的标准 .funscript JSON。文件内容见 funscript 格式

设备适配

适配只作用于发送给设备的副本,从不作用于保存的文件:间隔小于设备分辨能力的点会被合并,超过设备速度上限的片段会缩小幅度但保留时间点,点密度也有上限。对于 Autoblow AI Ultra,反转点还会对齐到 16 fps 的网格。在已发布的应用中,这种适配只用于 Autoblow 上传;对 Intiface 设备同样适配将在下一次更新中推出。设备之后如何与视频保持同步,见漂移校正与同步时序

各部分在哪里运行

所有分析都在你的电脑上进行。分析模块不含任何网络代码,视频从不会被上传。Hardware 设置提供 Auto(默认)、GPU (CUDA) 和 CPU 三个选项。

每个阶段使用的处理器
阶段运行于
视频解码有可用的硬件解码器时使用(任何厂商均可),否则使用 CPU
姿态与深度模型通过 CUDA 在 NVIDIA GPU 上运行(ONNX Runtime 或 PyTorch);无法使用 CUDA GPU 时在 CPU 上运行
光流CPU(OpenCV),在所有机器上都是如此

AI 模型没有 AMD 或 Intel 加速,也不使用 TensorRT。如果要求使用 CUDA GPU 但无法使用,姿态和深度会退回到 CPU,应用会报告实际使用的执行提供程序;Check GPU 按钮会告诉你是哪一个。CPU 路径可以工作但慢得多:RTX 5080 测试电脑上的一条代码注释记录,小型深度模型每次调用在 GPU 上约 25.8 ms,在 CPU 上则为 234 ms。

除开发者自己的 GPU 外,我们没有在任何其他 GPU 或纯 CPU 电脑上测量过整部影片的处理速度,因此本页不做任何速度承诺。基准测试页面列出了测量过什么、在什么设备上测量,以及哪些尚未测量。

我们尚未解决的问题

以下结果来自开发者自己的评分:对照他亲手编写脚本的 28 个短片段,这些片段取自默认参数所依据调校的五部影片,使用的是 2.121.1 之后的构建版本(已构建,尚未发布)。这只是一位脚本作者和一个小样本,请把它们看作已知弱点,而不是基准测试。

  • 漏掉方向变化。人工每秒有 2.29 次方向变化,引擎只有 1.80 次,少了约 21%。由于引擎的部分转向还是多余的或时机不对,人工的转向中只有大约一半能在 150 ms 内被匹配上。按影片计,行程转向的一致性为 0.33 到 0.71(F1,150 ms 以内)。
  • 快速行程偏小。在行程最快的两部影片上,引擎的行程幅度分别只有人工的四分之一和一半。目前的解释是,Balanced 每秒 10 次的采样(30 fps 视频)把快速运动平滑掉了。
  • 动作停止时它不会停。在人工标记为无动作的区间里,引擎每分钟仍会产生约 85 次方向变化。不过,当有真实运动的样本不到 5% 时,它确实会拒绝生成脚本。
  • 动作类型标签尚未得到验证。在按视频留出、使用开发者自己标签的测试中,动作分类器单独使用时的得分低于常数猜测,默认应用也没有可以公布的准确率数据。你自己设置的标签会覆盖它。

目前实用的应对办法是:时间轴编辑器、对选中区间以完整帧率执行 Re-analyze,以及 funscript 故障排除

延伸阅读

用你自己的视频试试

试用期为一天,在你自己的电脑上运行;你的视频在本地分析,从不上传。