Communitygithub.com

Chrome Video Render (CVR)

Remotion および HyperFrames 向け Android Chrome ビデオレンダリングアダプター。`cvr` で高速・軽量なレンダリングを開始し、`rvc` で詳細な環境・ハードウェア・セグメント・同期チェックを実行します。初回実行時にショート/ロングレンダリングプランを計測し、ヘッドレスChrome、ポータブルブラウザ検出、フォアグラウンド並列レンダリング、適応型セグメンテーション、PCMオーディオアセンブリ、AV同期検証をサポートします。

Chrome Video Render (CVR) とは?

Chrome Video Render (CVR) は、Android (proot) 環境において Remotion および HyperFrames 向けに最適化されたビデオレンダリングアダプターです。`cvr` モードでは初回実行時にレンダリングプランを計測し、以降はそのプランを読み込んで即座にレンダリングを開始するため、日常的なレンダリングが高速かつ軽量に行えます。一方 `rvc` モードでは毎回プランを再計測し、詳細な環境レポート・ハードウェア予算・セグメント検証・同期チェックを実行するため、診断やリリース前の確認に適しています。このスキルは、ヘッドレスChromeやポータブルブラウザの自動検出、フォアグラウンドでの並列レンダリング、フレーム数に応じて動的にセグメントサイズを調整する適応型セグメンテーション、PCMオーディオセグメントの結合と最終的なAACエンコード、そしてマーカーベースのAV同期検証をサポートします。ワーカー数はデバイスごとに実測され、設定ファイルに保存されるため、デフォルト値は同梱されていません。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Jacky-xw/chrome-video-render/tree/main

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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 は実行ごとに再計測します。適応型セグメンテーションにより、長尺ビデオでは同一の総デコードフレーム数に対してセグメント数が削減されます。実行によって生成された数値は、そのマシンの特性を表すものであり、他のデバイスでの保証ではありません。

関連スキル