跳到主要内容

视频防抖处理

AIBudsVideoStabilization 是可选后处理插件,可将受支持的复合六轴录像转换为防抖处理后的 MP4,同时保留已下载的源文件。

它不是设备端相机设置,也不会对实时预览执行防抖处理。处理会在媒体文件导入生成本地文件后开始。

Animated flow map

导入后视频防抖处理流程

符合条件的六轴视频进入可选处理时,已下载的原始文件始终作为可靠回退。

导入

已下载源文件

保留已下载源文件作为可靠回退。

适用性

检查录像

检查元数据和受支持的六轴录像数据。

可选处理器

视频防抖处理

创建衍生文件且不替换源文件。

首选输出

防抖处理后的 MP4

播放时优先使用已验证的防抖处理输出。

安全回退

使用原始文件

处理跳过或失败时使用原始文件。

  • 已下载源文件continues to检查录像
  • 检查录像符合条件视频防抖处理
  • 视频防抖处理continues to防抖处理后的 MP4
  • 检查录像未处理使用原始文件
  • 视频防抖处理失败使用原始文件
视频防抖处理失败只影响衍生结果,不会改变已经完成的下载结果。

流程边界

AIBuds 协调导入并调用已注册的 VideoStabilizationPluginAIBudsVideoStabilization 提供内置实现。AIBudsAllInOne 在套件初始化时注册该插件;模块化集成必须显式负责注册。

该模块还提供 VideoStabilizer,无需设备传输即可处理已有的本地复合录像。请持有返回的 VideoStabilizationTask 直到任务完成,以便随时取消处理。

使用 AI 辅助实现

使用 AI 开发

让 AI 帮助实现此工作流

使用官方“从 AIBuds 导入媒体”技能,根据你的 App 完成实现。

请阅读并遵循 https://docs-aibuds.github.io/zh-Hans/skills/import-aibuds-media,使用该技能在当前 iOS 项目中完成“从 AIBuds 导入媒体”,并验证结果。
查看官方技能

决定处理位置

如果导入和视频防抖处理需要作为一个协调操作,请使用 SDK 管理的处理;如果产品使用其他本地或服务端处理器,则将其禁用。切勿仅根据文件扩展名判断适用性;插件会检查本地文件和 MediaFileInfoModel

保留源文件

插件契约不得替换或删除输入。成功时优先使用衍生文件,否则使用已下载的原始文件:

Swift
let playableURL = importedFile.stabilizedFileURL ?? importedFile.localFileURL

不要把视频防抖处理失败视为下载失败。将传输和视频防抖处理显示为独立阶段,并保留每个文件的状态。

状态含义

状态产品含义
notRequired不是六轴文件;使用原始文件。
pending等待处理。
stabilized处理成功;优先使用 stabilizedFileURL
pluginUnavailable未注册插件;保留原始文件。
skipped插件无法处理该文件;保留原始文件。
failed处理失败;显示错误并在可用时保留原始文件。
disabled应用选择自行负责处理。

请参阅 StabilizationStatus。不要根据是否存在输出推断缺失状态。

质量与资源权衡

内置默认配置使用 trimRatio = 0.1,在 averageBitRate = 0 时自动推导码率,并选择 automatic。自动模式优先使用内存占用更低的陀螺仪/Metal 引擎;陀螺仪元数据或 Metal 不可用时可回退到 AWEIS。配置还提供已标定焦距、轴映射、传感器时间偏移、陀螺仪平滑、AWEIS 半径和控制台输出选项。裁剪越多,运动余量越大,但会损失画面区域;码率越高,存储和吞吐成本越高。请在有代表性的分辨率、时长、运动、存储和温度条件下验证自定义设置。

除非测试证明并行处理安全,否则应串行处理符合条件的文件。将单文件进度(0.0...1.0)与批次索引和数量分离,限制 UI 更新频率,并保证取消操作幂等。处理期间,应用可能同时持有原始、部分和最终文件。

保留检查清单

  • 已打包可选模块和许可证资源。
  • 模块化初始化只注册一个预期插件。
  • 已表示所有防抖处理状态。
  • 播放优先使用防抖处理后的输出,并可回退到原始文件。
  • 传输、单文件处理和批次完成保持区分。
  • 取消后仍保留可用输出和原始文件。
  • 已测试长视频的存储、内存、温度负载和中断。
  • 临时和保留媒体遵守隐私与删除策略。