프로젝트 / 영상·모션
영상·모션모션그래픽코드 기반 영상자동 QATTS 동기화Claude Code 스킬
코드로 만드는 모션그래픽 영상 엔진
HTML 타임라인을 프레임 단위로 렌더링하고, 레이아웃·영상·음량을 자동 검사하는 영상 제작 키트
- 기간
- 2026.09–2026.10
- 형태
- 사이드 프로젝트
- 상태
- 동작 확인
- 역할
- 설계·엔진 개발·스타일 팩 제작·검수 체계 설계 (1인)
6종장면별로 섞어 쓰는 스타일 팩(손그림·아이소·다크·키네틱·인포그래픽·사진)
12종엔진 내장 장면 전환
102건실제 제작에서 쌓은 교훈 기록(LESSONS)
−15.9LUFS82초 스타일 갤러리 최종판(v3) 음량, 레이아웃·영상 QA 결함 0건
문제
소개 영상·데모 영상을 AI 에이전트로 만들면 같은 요청에도 렌더마다 결과가 달라지고, 병렬 렌더나 모션블러를 걸면 글자가 겹치거나 숫자가 여러 개 겹쳐 보이는 문제가 생겼습니다. 글자 겹침, 화면 밖으로 잘린 텍스트, 휴대폰에서 읽기 어려운 작은 글씨, 들쭉날쭉한 음량은 사람이 처음부터 끝까지 다시 봐야만 찾을 수 있었습니다.
또 기술적으로 깨끗한 영상이 좋은 영상은 아니었습니다. 블라인드 비교에서 결함이 적은 영상이 이야기가 더 나은 거친 영상에 진 경우가 있어, 렌더 품질과 기획 품질을 따로 다루는 구조가 필요했습니다.
접근
- 모든 시각 값을 장면 시간 t에서만 계산하도록 규칙을 정했습니다. CSS 애니메이션·난수·현재 시각 사용을 금지하고, 글자 타이핑·카운터처럼 이산적인 값은 프레임 격자에 맞춘 시간으로 계산해 모션블러 서브샘플이 서로 어긋나지 않게 했습니다.
- 렌더 전에 레이아웃 검사(겹침·안전 영역·작은 글씨·읽기 속도·잘림·폰트 로딩)를 0.05초 간격으로 돌리고, 렌더 후에는 영상 검사(1프레임 튐·급변·검은 화면·정지 구간·브랜드 색 비중)와 음량 검사(−16 LUFS ±2, 트루피크 −1dB 이하)를 통과해야만 결과 폴더에 영상이 놓이도록 했습니다.
- 화면에서 일어나는 클릭·등장·전환을 이벤트로 기록하고, 이 이벤트로 배경음과 효과음을 절차적으로 생성해 소리가 화면 동작에 맞춰 붙도록 했습니다.
- 한 가지 룩에 머물던 엔진을 장면별로 선택하는 스타일 팩 6종으로 확장하고, 나레이션을 먼저 TTS로 만든 뒤 단어 타이밍에 맞춰 그래픽이 들어오는 흐름과 AI 실사 클립을 섞는 하이브리드 흐름을 추가했습니다.
- 만든 사람이 자기 결과를 후하게 보는 문제를 피하려고, 결함을 찾는 검수자와 아트 디렉터 관점의 평가자를 각각 맥락 없는 별도 에이전트로 두었습니다.
구조
기획장면표(시간·박자·구도·캡션·증명할 주장·소리)를 먼저 쓰고 첫 3초 훅과 주장별 장면을 배치합니다.
디자인 시스템색을 역할별로 배정하고 글꼴 2종 이하, 영상 전체를 잇는 모티프 하나를 정합니다.
장면 제작장면마다 정지 컷 3~5장을 렌더해 확인하며 다듬습니다.
레이아웃 게이트겹침·안전 영역·작은 글씨·읽기 속도 결함이 0건일 때만 영상 렌더로 넘어갑니다.
렌더·사운드모션블러 렌더 후 화면 이벤트로 배경음·효과음을 만들고 합칩니다.
영상·음량 게이트와 독립 검수자동 검사 두 개를 통과한 영상만 출력되고, 별도 에이전트가 결함과 완성도를 따로 평가합니다.
주요 기능
결정론 렌더 엔진모든 프레임을 시간의 함수로 계산해 순서와 무관하게 병렬 렌더하고, 프레임당 16개 서브샘플 모션블러를 적용합니다.
스타일 팩 6종손그림·아이소메트릭·다크 테크·키네틱 타이포·인포그래픽(픽토그램)·사진 카메라워크를 장면 단위로 섞어 씁니다.
가로·세로 포맷16:9와 9:16을 무대에 한 번 선언하고, 세로 포맷에서는 피드 UI가 덮는 영역에 글자가 들어가면 검사에서 잡습니다.
출력을 막는 QA 게이트레이아웃·영상·음량 검사 중 하나라도 실패하면 최종 영상이 출력 폴더로 이동하지 않습니다.
나레이션 동기화문장별 TTS 후 음성 인식으로 단어 타이밍을 받아 원고와 일치도를 확인하고, 그래픽이 해당 단어에 맞춰 들어오게 합니다.
이벤트 기반 사운드화면 이벤트에서 배경음 편곡과 40여 종 효과음을 생성하고 음량을 마스터링합니다.
결과
- 스타일 팩 6종을 모두 담은 82초 스타일 갤러리 영상을 만들었습니다. v2는 영상 QA 결함 0건·−16.0 LUFS였고, 모션블러 16으로 재렌더한 최종 v3도 레이아웃·영상 QA 결함 0건, −15.9 LUFS로 통과했습니다.
- 갤러리 v1에서 독립 검수로 결함 14건을 찾아 v2에서 수정했습니다. 아트 디렉터 평가는 47/70에서 48/70으로 올랐고, 첫 3초 훅·팩 경계 전환 등 남은 지적은 기록해 보류했습니다.
- 같은 세로 릴스 요청을 서로 다른 에이전트가 두 번 만든 결과(두 번째는 첫 검수 교훈을 엔진 문서에 반영한 뒤), 두 편 모두 자동 QA 9/9를 통과했지만 독립 검수 평가는 43/70과 47/70이었습니다. 이 차이를 훅 설계 규칙으로 엔진 문서에 반영했습니다.
- 20초 가로·세로 스타터 템플릿과 프로젝트 생성 스크립트를 갖춰, 새 영상을 스타일 팩을 지정해 바로 시작할 수 있습니다.
포인트
자동 검사는 영상을 망가뜨리는 결함은 잡지만, 영상이 지루한지는 판단하지 못했습니다. 자동 QA를 모두 통과한 세로 영상 두 편이 독립 검수 평가에서 43점과 47점에 그친 것이 그 근거입니다. 그래서 검사는 «출력을 막는 게이트»로, 완성도 평가는 «맥락 없는 별도 평가자»로 역할을 나눴고, 기획 단계에 장면표와 주장별 증명 장면을 의무로 넣었습니다.
렌더를 병렬·서브샘플로 돌리면 «시간에서만 값이 나온다»는 계약이 깨지는 순간 겹친 글자로 화면에 드러났습니다. 규칙을 문서로만 두지 않고, 결함을 일부러 심은 자체 테스트 페이지로 검사 도구부터 검증하는 방식이 유지보수에 도움이 됐습니다.
기술
HTML/CSS/JavaScriptPlaywright(Chromium)ffmpegPython(numpy·scipy·Pillow)EBU R128 음량 측정Gemini TTSElevenLabs ScribeVeo(이미지→영상)Gemini 영상 분석Claude Code 스킬
상단 영상은 실제 화면을 녹화한 것입니다.