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

タイムラインと書き出し

MovieAssetManagerは、タイムラインの状態、フレーム生成、音声イベント、プレビュー、ファイル書き出しを管理します。タイムラインの時刻はObjects、動画、音声、PenFXで共有されます。

タイムライン設定

設定既定値正規化
duration10秒0.1〜3600秒。無効値は10秒
framerate30 fps1〜120 fps
width / heightステージサイズ設定UIでは各1〜4096 px。読み込み時の下限は1 px
rangeStart0秒0〜duration
rangeEnddurationrangeStartduration
exportFormatmp4mp4webmpng-sequencepng-frameaudio-wav
reuseFramestruefalseならキャッシュを使わない

タイムラインのシリアライズ対象は、durationexportFormatframerateheightkeyframesrangeEndrangeStartreuseFramessoundwidthです。

UI操作

タイムラインUIは、再生、ポーズ、停止、時刻のスクラブ、キーフレームの追加・削除、フレーム単位の前後移動、先頭・末尾移動、タイムライン表示のズームを提供します。

書き出し設定では、範囲、解像度、FPS、形式、フレーム再利用を指定できます。timeline diagnosticsの警告から該当ブロックへフォーカスすることもできます。

プリセット

プリセットFPS出力サイズ
Preview 720p241280×720
Final 1080p301920×1080
Final 4K303840×2160

再生とシーク

  • playは現在時刻がduration以上なら0秒へ戻し、音声とVM実行を再初期化します。
  • pauseは実時間から現在時刻をサンプルし、音声、実行スレッド、プレビューサイズを停止・復元します。
  • stopは0秒へ戻し、未完了の書き出しをキャンセルします。
  • seekは再生状態を維持したまま指定時刻へ移動し、次のフレームを再評価します。

再生中のevent_renderframeは実時間に基づきます。書き出し中は、renderFrameIndex / framerateで得られる決定的な時刻を使います。

フレーム生成ライフサイクル

書き出しは、次のフレーム生成トランザクションで進みます。

  1. 既存の音声、保留中の描画、VM実行を停止する
  2. 必要ならレンダラーを出力サイズへ変更し、event_initializeを開始する
  3. 初期化スレッド、資産読み込み、保留中のビジュアル処理が終わるまで内部状態で待つ
  4. フレームごとにframe graphを開始し、決定的なタイムライン時刻を設定する
  5. Penを透明なstaging frameへ切り替え、既定背景を描画する
  6. event_renderframeを起動する
  7. frame graph、Objects、ビデオ、テキスト、モデル、PenFXの処理を完了する
  8. 音声イベントを確定し、Pen frameをcommitしてからフレームを保存する
  9. 次のフレームへ進み、終了時にプレビューサイズを復元して完了を通知する

出力範囲を指定した場合は、rangeStartからrangeEndまでを含むフレームを処理します。フレーム途中の失敗や停止では、未完成のPen transactionをcommitしません。

出力形式

形式内容
mp4MediaRecorderによる動画。codecは実行環境で選択
webm透明背景を保持できるWebM。codecは実行環境で選択
png-sequenceframe-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が有効なら、変更されていないフレームと対応する音声イベントを再利用します。無効にするとキャッシュを使いません。