タイムラインと書き出し
MovieAssetManagerは、タイムラインの状態、フレーム生成、音声イベント、プレビュー、ファイル書き出しを管理します。タイムラインの時刻はObjects、動画、音声、PenFXで共有されます。
タイムライン設定
| 設定 | 既定値 | 正規化 |
|---|---|---|
duration | 10秒 | 0.1〜3600秒。無効値は10秒 |
framerate | 30 fps | 1〜120 fps |
width / height | ステージサイズ | 設定UIでは各1〜4096 px。読み込み時の下限は1 px |
rangeStart | 0秒 | 0〜duration |
rangeEnd | duration | rangeStart〜duration |
exportFormat | mp4 | mp4、webm、png-sequence、png-frame、audio-wav |
reuseFrames | true | falseならキャッシュを使わない |
タイムラインのシリアライズ対象は、duration、exportFormat、framerate、height、keyframes、rangeEnd、rangeStart、reuseFrames、sound、widthです。
UI操作
タイムラインUIは、再生、ポーズ、停止、時刻のスクラブ、キーフレームの追加・削除、フレーム単位の前後移動、先頭・末尾移動、タイムライン表示のズームを提供します。
書き出し設定では、範囲、解像度、FPS、形式、フレーム再利用を指定できます。timeline diagnosticsの警告から該当ブロックへフォーカスすることもできます。
プリセット
| プリセット | FPS | 出力サイズ |
|---|---|---|
| Preview 720p | 24 | 1280×720 |
| Final 1080p | 30 | 1920×1080 |
| Final 4K | 30 | 3840×2160 |
再生とシーク
playは現在時刻がduration以上なら0秒へ戻し、音声とVM実行を再初期化します。pauseは実時間から現在時刻をサンプルし、音声、実行スレッド、プレビューサイズを停止・復元します。stopは0秒へ戻し、未完了の書き出しをキャンセルします。seekは再生状態を維持したまま指定時刻へ移動し、次のフレームを再評価します。
再生中のevent_renderframeは実時間に基づきます。書き出し中は、renderFrameIndex / framerateで得られる決定的な時刻を使います。
フレーム生成ライフサイクル
書き出しは、次のフレーム生成トランザクションで進みます。
- 既存の音声、保留中の描画、VM実行を停止する
- 必要ならレンダラーを出力サイズへ変更し、
event_initializeを開始する - 初期化スレッド、資産読み込み、保留中のビジュアル処理が終わるまで内部状態で待つ
- フレームごとにframe graphを開始し、決定的なタイムライン時刻を設定する
- Penを透明なstaging frameへ切り替え、既定背景を描画する
event_renderframeを起動する- frame graph、Objects、ビデオ、テキスト、モデル、PenFXの処理を完了する
- 音声イベントを確定し、Pen frameをcommitしてからフレームを保存する
- 次のフレームへ進み、終了時にプレビューサイズを復元して完了を通知する
出力範囲を指定した場合は、rangeStartからrangeEndまでを含むフレームを処理します。フレーム途中の失敗や停止では、未完成のPen transactionをcommitしません。
出力形式
| 形式 | 内容 |
|---|---|
mp4 | MediaRecorderによる動画。codecは実行環境で選択 |
webm | 透明背景を保持できるWebM。codecは実行環境で選択 |
png-sequence | frame-XXXX.pngのZIP。フレームエラーがあればrender-errors.jsonも含められる |
png-frame | 現在時刻の1フレームPNG |
audio-wav | タイムライン音声のみのWAV |
UIのrenderAndExportTimelineはUI用の非同期APIです。Scratchのcommand primitiveの戻り値契約とは別で、レンダリングの完了・キャンセル・エラーイベントを待ってからエンコードを開始します。
音声エンコード
音声はWeb AudioのBufferSourceとしてframe/clipから構築します。playback rate、offset、duration、volume、pan、pitchを反映します。
同時発音の合計音量が1を超える場合は、音色とダイナミクスを変えない定数gainで全体を縮小します。encoder前のmaster gainは0.8912509381337456(-1 dBFS headroom)を基本値とします。
フレームキャッシュ
cache keyは、render cache generation、width、height、framerate、frame indexで構成されます。タイムライン設定またはプロジェクト変更時はgenerationを進め、古いフレームキャッシュと音声イベントキャッシュを破棄します。
reuseFramesが有効なら、変更されていないフレームと対応する音声イベントを再利用します。無効にするとキャッシュを使いません。