ビデオ処理エンジン
動画処理の中核となるエンジン設計
ビデオエンジンの役割
入力処理
- ・ 動画ファイルの読み込み
- ・ メタデータ抽出
- ・ サムネイル生成
- ・ 波形データ生成
編集処理
- ・ カット・トリミング
- ・ 結合・連結
- ・ エフェクト適用
- ・ トランジション
プレビュー
- ・ リアルタイムプレビュー
- ・ プロキシ生成
- ・ キャッシュ管理
- ・ フレーム単位シーク
出力処理
- ・ エンコード
- ・ フォーマット変換
- ・ 進捗管理
- ・ バッチ処理
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
キャッシュ管理
キャッシュ対象
- ・ サムネイル: 各フレームのプレビュー画像
- ・ 波形データ: オーディオの視覚化
- ・ プロキシ: 編集用低解像度動画
- ・ レンダーキャッシュ: 処理済みセグメント