Chrome Video Render (CVR)은(는) 무엇을 하나요?
Android/proot 브라우저 및 Remotion, HyperFrames용 렌더링 어댑터입니다. 컴포지션 콘텐츠 및 오디오 타임라인은 비디오 프로젝트가 소유합니다.
시작 모드
| 모드 | 용도 | 시작 동작 |
|---|---|---|
cvr | 기본, 일상 렌더링 | 첫 실행 시 단기/장기 렌더 계획을 측정합니다(소요 시간은 후보 수에 비례하며 사전에 안내됨). 이후 실행은 계획 파일을 읽고 즉시 시작합니다. 추가 npm/브라우저 버전 프로브 없음. 간결한 한 줄 결과 출력 |
rvc | 진단, 릴리스 검사 | 실행 시마다 두 계획을 다시 측정하고 공유 계획 파일을 덮어씁니다(이력은 보관됨). 전체 환경 보고서, 하드웨어 예산 세부 정보, 세그먼트별 검증 및 선택적 동기화 검사. 단계별 타이밍 요약 |
두 모드 모두 포그라운드에서 실행됩니다. 독립적 작업은 직렬화되며, 하나의 작업 내 병렬성은 측정된 계획에 의해 제한됩니다.
# 간단한 렌더링
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
렌더 계획
작업자 수는 추론되지 않고 측정됩니다. 첫 사용 시, 각 후보 작업자 수에 대해 두 개의 고정 프로브 컴포지션을 여러 라운드에 걸쳐 렌더링하고, 중앙값으로 각 후보의 점수를 결정합니다. 승자는 <project>/node_modules/.cache/cvr-render-plan.json 파일에 단기(<=300프레임) 및 장기 비디오용으로 각각 기록됩니다. 이후 cvr 실행은 일치하는 계획을 읽고 즉시 렌더링을 시작합니다. rvc는 실행 시마다 다시 측정하고, 계획 파일을 덮어쓴 후 해당 작업을 새 숫자로 렌더링합니다. 각 쓰기는 history 리스트에 추가됩니다.
기본 작업자 수는 제공되지 않습니다. 어떤 작업자 수가 승리할지는 기기에 따라 다르기 때문입니다. 첫 실행은 시작 전에 수행할 작업을 출력합니다(길이 클래스당 라운드당 후보당 하나의 프로브 렌더링이 필요하기 때문). --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 세그먼트와 최종 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, 오디오 및 무음 컴포지션, 매개변수 전달 및 동기화 검사. 버전은 시도된 내용을 보여주기 위해 나열된 것이지, 지원되는 버전을 주장하는 것이 아닙니다.
첫 실행 시 길이 클래스당 라운드당 후보당 하나의 프로브 렌더링이 필요하므로, 소요 시간은 후보 수와 비디오 길이에 비례합니다. 이는 기기당 한 번만 발생하는 비용이며, 이후 실행은 기록된 계획을 읽습니다. rvc는 실행 시마다 다시 측정합니다. 적응형 세분화는 동일한 디코딩 프레임 수에서 긴 비디오의 세그먼트 수를 줄입니다. 실행 시 생성된 모든 수치는 해당 머신을 설명하는 것이며, 다른 기기에 대한 보장이 아닙니다.