Chrome Video Render (CVR)
Adaptador de navegador y renderizado para Android/proot, diseñado para Remotion e HyperFrames. El contenido de la composición y las líneas de tiempo de audio permanecen bajo la propiedad del proyecto de video.
Modos de inicio
| Modo | Uso | Comportamiento al iniciar |
|---|---|---|
cvr | predeterminado, renderizados cotidianos | la primera ejecución mide planes de renderizado cortos/largos (la duración escala con el número de candidatos, anunciado de antemano); las ejecuciones posteriores leen el archivo de plan y comienzan de inmediato; sin sondas adicionales de npm/versión del navegador; resultado conciso en una línea |
rvc | diagnósticos, verificaciones de lanzamiento | mide ambos planes en cada ejecución y sobrescribe el archivo de plan compartido (se mantiene un historial); informe completo del entorno, detalle del presupuesto de hardware, validación por segmento y verificación de sincronización opcional; resumen de tiempos por fase |
Ambos modos se ejecutan en primer plano. Los trabajos independientes se serializan; el paralelismo dentro de un mismo trabajo está limitado por el plan medido.
# Ligero
python3 /skills/chrome-video-render/scripts/remotion-segmented.py --project . --composition Hello --output out.mp4 --mode quick
# Detallado
python3 /skills/chrome-video-render/scripts/remotion-segmented.py --project . --composition Hello --output out.mp4 --mode full --sync-check
Planes de renderizado
El número de trabajadores se mide, no se infiere. En el primer uso, se renderizan dos composiciones de prueba fijas con cada número candidato de trabajadores durante varias rondas, y la mediana decide la puntuación de cada candidato; el ganador se registra por separado para videos cortos (<=300 frames) y largos en <project>/node_modules/.cache/cvr-render-plan.json. Las ejecuciones posteriores de cvr leen el plan correspondiente y comienzan a renderizar inmediatamente. rvc mide de nuevo en cada ejecución, sobrescribe el archivo de plan y renderiza ese trabajo con los nuevos números; cada escritura se añade a una lista de history.
No se envía ningún número de trabajadores como predeterminado, porque cuál gana depende del dispositivo. La primera ejecución imprime lo que está haciendo antes de comenzar, ya que cuesta un renderizado de prueba por candidato por ronda por clase de duración. --workers N omite por completo las pruebas.
Entorno del navegador
source /skills/chrome-video-render/scripts/video-browser-env.sh
cvr usa los lanzadores de esta instalación. rvc además ejecuta render-env.sh --json para informar sobre el navegador, el motor y el hardware. Para un checkout fuera de /skills, use el directorio scripts/ de ese checkout.
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"}'
Utiliza el paquete Remotion del proyecto de destino y las API oficiales selectComposition(), renderMedia() y combineChunks(). Admite FPS fraccional y propiedades JSON. Produce segmentos PCM y un codificado AAC final de entrega.
El tamaño del segmento se adapta a la duración de la composición cuando no se especifica --segment-frames: 90 frames hasta 300 frames, 150 hasta 900, 300 hasta 3000 y 450 más allá. Por lo tanto, los videos largos evitan dividirse en docenas de segmentos que reinician el navegador cada vez. Pase --segment-frames para fijar un tamaño fijo.
HyperFrames
Después de la revisión y aprobación del proyecto:
python3 /skills/chrome-video-render/scripts/hyperframes-render.py \
--project /path/to/project --output /path/to/output.mp4 \
--quality looks --workers 2 # valor de ejemplo; elegir por proyecto
Mantiene la línea de tiempo nativa de HyperFrames, el mezclador y el sistema de trabajadores. El adaptador de backend se selecciona por firma de función, no por un nombre de archivo de build generado.
--mode quick usa el lanzador Headless Shell instalado; --mode full ejecuta render-env.sh y dimensiona los trabajadores según el presupuesto de hardware. La invocación subyacente de hyperframes render es la misma en ambos modos, y un --workers explícito se respeta en cualquier caso. HyperFrames no utiliza los planes de renderizado medidos.
Verificación
cvr: verificaciones básicas de fotogramas decodificados, FPS, dimensiones y propiedades de audio; el estado de sincronización sigue siendonot-measureda menos que se solicite una verificación de calibración.rvc: decodificación completa de una sola pasada, detalle por segmento, presupuesto de hardware, verificaciones de sincronización basadas en marcadores y un resumen de tiempos por fase.check-av-sync.pyrequiere una composición de calibración con pulsos PCM conocidos y destellos visuales.selftest-av-sync.pyvalida señales tanto alineadas como deliberadamente retrasadas.webgl-policy-check.pyes una auditoría de backend opcional, no un paso de renderizado rutinario.
Consulte implementación y compatibilidad, backend del navegador y notas del backend.
Alcance de la validación
Probado en Android/proot aarch64 con Remotion 4.0.538 e HyperFrames 0.8.198: FPS fraccional, composiciones con y sin audio, reenvío de parámetros y verificaciones de sincronización. Las versiones se enumeran para que el lector pueda ver lo que se probó, no como una declaración de versiones compatibles.
La primera ejecución cuesta un renderizado de prueba por candidato por ronda por clase de duración, por lo que su duración escala con el número de candidatos y la duración del video; es un costo único por dispositivo, ya que las ejecuciones posteriores leen el plan registrado. rvc mide de nuevo en cada ejecución. La segmentación adaptativa reduce el número de segmentos para videos más largos con el mismo total de fotogramas decodificados. Cualquier cifra producida por una ejecución describe la máquina que la produjo, no una garantía para otros dispositivos.