さとまたwiki

ビデオ処理エンジン

動画処理の中核となるエンジン設計

ビデオエンジンの役割

入力処理

  • ・ 動画ファイルの読み込み
  • ・ メタデータ抽出
  • ・ サムネイル生成
  • ・ 波形データ生成

編集処理

  • ・ カット・トリミング
  • ・ 結合・連結
  • ・ エフェクト適用
  • ・ トランジション

プレビュー

  • ・ リアルタイムプレビュー
  • ・ プロキシ生成
  • ・ キャッシュ管理
  • ・ フレーム単位シーク

出力処理

  • ・ エンコード
  • ・ フォーマット変換
  • ・ 進捗管理
  • ・ バッチ処理

FFmpegコマンド構築

// src/lib/utils/ffmpeg-builder.ts
interface FFmpegCommand {
  inputs: string[];
  filters: string[];
  output: string;
  options: Record<string, string>;
}

export function buildCommand(cmd: FFmpegCommand): string[] {
  const args: string[] = [];

  // 入力ファイル
  cmd.inputs.forEach(input => {
    args.push('-i', input);
  });

  // フィルター
  if (cmd.filters.length > 0) {
    args.push('-vf', cmd.filters.join(','));
  }

  // オプション
  Object.entries(cmd.options).forEach(([key, value]) => {
    args.push(`-${key}`, value);
  });

  // 出力
  args.push(cmd.output);

  return args;
}

プレビュー戦略

推奨: HTML5 Video + プロキシ

高解像度の元素材からプロキシ(低解像度版)を生成し、 プレビューにはプロキシを使用。最終出力時のみ元素材を使用。

プロキシ生成コマンド

ffmpeg -i original.mp4 -vf "scale=640:-1" -c:v libx264 -preset ultrafast proxy.mp4

キャッシュ管理

キャッシュ対象

  • サムネイル: 各フレームのプレビュー画像
  • 波形データ: オーディオの視覚化
  • プロキシ: 編集用低解像度動画
  • レンダーキャッシュ: 処理済みセグメント

この記事はClaude Opus 4.6によって作成されました