メインコンテンツまでスキップ

動画の手ぶれ補正

AIBudsVideoStabilization は、ダウンロードした元ファイルを保持したまま、対応する複合 6 軸録画を手ぶれ補正済み MP4 に変換する任意の後処理プラグインです。

これはデバイス上のカメラ設定ではなく、ライブプレビューの手ぶれを補正するものでもありません。メディアファイルの取り込みによってローカルファイルが生成された後に処理を開始します。

Animated flow map

取り込み後の手ぶれ補正パイプライン

対応する 6 軸動画を任意処理に渡す間も、ダウンロード済みの元ファイルを確実なフォールバックとして保持します。

取り込み

ダウンロード済みの元ファイル

ダウンロードした元ファイルを確実なフォールバックとして保持します。

適用可否

録画を確認

メタデータと対応する 6 軸録画データを確認します。

任意の処理

動画の手ぶれを補正

元ファイルを置き換えずに派生ファイルを作成します。

優先出力

手ぶれ補正済み MP4

検証済みの手ぶれ補正済みファイルを優先して再生します。

安全なフォールバック

元ファイルを使用

処理をスキップした場合や失敗した場合は元ファイルを使用します。

  • ダウンロード済みの元ファイルcontinues to録画を確認
  • 録画を確認処理可能動画の手ぶれを補正
  • 動画の手ぶれを補正continues to手ぶれ補正済み MP4
  • 録画を確認未処理元ファイルを使用
  • 動画の手ぶれを補正失敗元ファイルを使用
手ぶれ補正の失敗は派生ファイルの結果に影響しますが、完了済みのダウンロード結果は変わりません。

パイプラインの境界

AIBuds が取り込み処理を調整し、登録済みの VideoStabilizationPlugin を呼び出します。AIBudsVideoStabilization は組み込み実装を提供します。AIBudsAllInOne は SDK 一式の初期化時に登録しますが、モジュール別統合ではアプリが明示的に登録を管理する必要があります。

このモジュールは VideoStabilizer も提供し、デバイス転送なしで既存のローカル複合録画を処理できます。処理をキャンセルできるよう、完了まで返された VideoStabilizationTask を保持してください。

AI を活用して実装

AI で実装

AI でこのワークフローを実装

公式の「AIBuds からメディアを読み込む」スキルを使い、アプリに合わせて実装します。

https://docs-aibuds.github.io/ja/skills/import-aibuds-media を読み、その指示に従ってください。このスキルで「AIBuds からメディアを読み込む」をこの iOS プロジェクトに実装し、検証してください。
公式スキルを見る

処理を担当する場所を決める

取り込みと手ぶれ補正を 1 つの連携処理として扱う場合は、SDK 管理の処理を使用します。製品が別のローカル処理またはサーバー処理を持つ場合は無効にしてください。ファイル拡張子だけで処理可否を判断せず、プラグインによるローカルファイルと MediaFileInfoModel の検査結果を使用します。

元ファイルを保持する

プラグインの契約では、入力ファイルを置き換えたり削除したりしてはいけません。成功時は派生ファイルを優先し、それ以外の場合はダウンロードした元ファイルを使用します。

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

手ぶれ補正の失敗をダウンロードの失敗として扱わないでください。転送と手ぶれ補正を別の段階として表示し、ファイルごとの状態を保持します。

ステータスの解釈

ステータス製品上の意味
notRequired6 軸ファイルではないため、元ファイルを使用します。
pending処理待ちです。
stabilized処理に成功したため、stabilizedFileURL を優先します。
pluginUnavailableプラグインが未登録のため、元ファイルを保持します。
skippedプラグインで処理できないファイルのため、元ファイルを保持します。
failed処理に失敗しました。エラーを提示し、利用できる場合は元ファイルを保持します。
disabledアプリが処理を管理する設定です。

StabilizationStatus を参照してください。出力ファイルの有無から、欠落したステータスを推測しないでください。

品質とリソースのトレードオフ

組み込みの既定設定では trimRatio = 0.1 を使用し、averageBitRate = 0 の場合はビットレートを算出して automatic を選択します。自動モードは低メモリのジャイロ/Metal エンジンを優先し、ジャイロメタデータまたは Metal が利用できない場合は AWEIS にフォールバックできます。設定には、較正済み焦点距離、軸マッピング、センサー時間オフセット、ジャイロ平滑化、AWEIS 半径、コンソール出力の制御も含まれます。クロップ量を増やすと画面領域が減り、高いビットレートはストレージとスループットを消費します。代表的な条件でカスタム設定を検証してください。

並列処理の安全性をテストで確認できるまでは、対象ファイルを直列に処理します。ファイルごとの進捗(0.0...1.0)をバッチの番号/件数と分け、UI 更新を間引き、キャンセル処理を冪等にしてください。処理中は、元ファイル、処理途中のファイル、完成ファイルを同時に保持する場合があります。

ファイル保持のチェックリスト

  • 任意モジュールとライセンスリソースをパッケージに含めている。
  • モジュール別初期化で、使用するプラグインを 1 つ登録している。
  • すべての手ぶれ補正ステータスを扱っている。
  • 再生では手ぶれ補正済み出力を優先し、元ファイルへフォールバックできる。
  • 転送、ファイルごとの処理、バッチ完了を区別している。
  • キャンセル時も使用可能な出力と元ファイルを保持している。
  • 長時間動画について、ストレージ、メモリ、温度負荷、中断をテストしている。
  • 一時メディアと保持するメディアが、プライバシーおよび削除方針に従っている。