Chrome Video Render (CVR) は何をしますか?
Android/proot 向けブラウザ兼レンダリングアダプター(Remotion および HyperFrames 用)。コンポジションのコンテンツとオーディオのタイムラインは、ビデオプロジェクト側で管理されます。
起動モード
| モード | 用途 | 起動時の動作 |
|---|---|---|
cvr | デフォルト、日常的なレンダリング | 初回実行時にショート/ロングレンダリングプランを計測(所要時間は候補ワーカー数に比例し、事前に告知されます)。以降の実行ではプランファイルを読み込み、即座にレンダリングを開始。npmやブラウザのバージョンプローブは行いません。結果は1行で簡潔に出力 |
rvc | 診断、リリース前チェック | 実行ごとに両方のプランを再計測し、共有プランファイルを上書き(履歴は保持)。完全な環境レポート、ハードウェア予算の詳細、セグメントごとの検証、オプションの同期チェックを実施。フェーズごとのタイミングサマリーを出力 |
どちらのモードもフォアグラウンドで動作します。独立したジョブは直列化されます。1つのジョブ内の並列度は計測されたプランによって制限されます。
# 軽量
python3 /skills/chrome-video-render/scripts/remotion-segmented.py --project . --composition Hello --output out.mp4 --mode quick
# 詳細
python3 /skills/chrome-video-render/scripts/remotion-segmented.py --project . --composition Hello --output out.mp4 --mode full --sync-check
レンダリングプラン
ワーカー数は推定ではなく実測によって決定されます。初回使用時、2つの固定プローブコンポジションが各候補ワーカー数で複数ラウンドレンダリングされ、中央値によって各候補のスコアが決定されます。勝者はショート(300フレーム以下)とロングビデオに分けて <project>/node_modules/.cache/cvr-render-plan.json に記録されます。以降の cvr 実行は該当するプランを読み込み、即座にレンダリングを開始します。rvc は実行ごとに再計測し、プランファイルを上書きしてそのジョブを新しい数値でレンダリングします。各書き込みは history リストに追記されます。
どのデバイスでどのワーカー数が最適かはデバイス依存であるため、デフォルトのワーカー数は同梱されません。初回実行は開始前に何を行うかを表示します。これは、長さクラスごとに各候補・各ラウンドで1回のプローブレンダリングが発生するためです。--workers N を指定すると、プローブを完全にスキップします。
ブラウザ環境
source /skills/chrome-video-render/scripts/video-browser-env.sh
cvr はこのインストールのランチャーを使用します。rvc はさらに render-env.sh --json を実行し、ブラウザ、エンジン、ハードウェアのレポートを出力します。/skills 以外のチェックアウトを使用する場合は、そのチェックアウトの scripts/ ディレクトリを使用してください。
Remotion
python3 /skills/chrome-video-render/scripts/remotion-segmented.py \
--project /path/to/project --entry src/index.ts \
--composition Hello --output /path/to/output.mp4 \
--input-props '{"title":"Example"}'
ターゲットプロジェクトの Remotion パッケージと公式の selectComposition()、renderMedia()、combineChunks() API を使用します。小数FPSおよびJSONプロップスに対応します。PCMセグメントを生成し、最終的に1つのAAC配信用エンコードを行います。
セグメントサイズは、--segment-frames が省略された場合、コンポジションの長さに応じて適応的に変化します。300フレームまでは90フレーム、900フレームまでは150フレーム、3000フレームまでは300フレーム、それを超えると450フレームになります。これにより、長尺ビデオが数十のセグメントに分割されて各セグメントでブラウザが起動されるのを防ぎます。固定サイズを指定するには --segment-frames を渡してください。
HyperFrames
プロジェクトのレビューと承認後:
python3 /skills/chrome-video-render/scripts/hyperframes-render.py \
--project /path/to/project --output /path/to/output.mp4 \
--quality looks --workers 2 # 例示の値。プロジェクトごとに選択してください
HyperFrames のネイティブなタイムライン、ミキサー、ワーカーシステムを維持します。バックエンドアダプターは関数シグネチャによって選択され、生成されたビルドファイル名ではありません。
--mode quick はインストール済みの Headless Shell ランチャーを使用します。--mode full は render-env.sh を実行し、ハードウェア予算からワーカー数を決定します。どちらのモードでも基盤となる hyperframes render の呼び出しは同一であり、明示的な --workers は常に優先されます。HyperFrames は計測されたレンダリングプランを使用しません。
検証
cvr: 基本的なデコードフレーム、FPS、寸法、オーディオプロパティのチェック。キャリブレーションチェックが要求されない限り、同期ステータスはnot-measuredのままです。rvc: シングルパス完全デコード、セグメントごとの詳細、ハードウェア予算、マーカーベースの同期チェック、フェーズごとのタイミングサマリー。check-av-sync.pyは、既知のPCMパルスと視覚的フラッシュを含むキャリブレーションコンポジションを必要とします。selftest-av-sync.pyは、正しく同期された信号と意図的に遅延させた信号の両方を検証します。webgl-policy-check.pyはオプションのバックエンド監査であり、通常のレンダリング手順ではありません。
実装と互換性、ブラウザバックエンド、バックエンドノート を参照してください。
検証範囲
Android/proot aarch64 上で Remotion 4.0.538 および HyperFrames 0.8.198 を使用して検証済み:小数FPS、オーディオあり・なしのコンポジション、パラメータ転送、同期チェック。バージョンは試した内容を示すために記載されており、サポート対象バージョンとして主張するものではありません。
初回実行は、長さクラスごとに各候補・各ラウンドで1回のプローブレンダリングが発生するため、所要時間は候補数とビデオ長に比例します。これはデバイスごとに1回だけのコストであり、以降の実行は記録されたプランを読み込みます。rvc は実行ごとに再計測します。適応型セグメンテーションにより、長尺ビデオでは同一の総デコードフレーム数に対してセグメント数が削減されます。実行によって生成された数値は、そのマシンの特性を表すものであり、他のデバイスでの保証ではありません。