name: impactful-explainer-video description: Make an animated explainer video that helps someone understand a technical idea, such as a bug, a system design question or an algorithm. Runs fully on the local machine with no paid APIs (manim for animation, Kokoro for narration, faster-whisper for captions, generated sound effects, ffmpeg to put it together). The look is minimal: black background, one accent colour, one diagram that keeps changing, small UI cards and a status line at the bottom. Use it when someone asks for an animated or explainer video, something "like Engineering Digest", or a narrated walkthrough of a concept with captions and sound.
설명 영상
목표는 한 번만 봐도 실제로 이해할 수 있는 영상입니다. 차분하고, 명확하며, 정보로 가득 차 있습니다. 시끄럽거나, 흔들리거나, 그냥 화려하기만 한 영상이 아닙니다.
어떻게 보여야 하는가
- 순수한 검은 배경. 깊이는 그라데이션이나 광채가 아니라 글꼴과 레이아웃에서 나옵니다.
- 흰색과 회색 텍스트와 하나의 포인트 컬러. 파란색이 잘 어울립니다. 빨간색은 실제로 고장나거나 위험한 것에만 아껴서 사용하세요.
- 주제당 하나의 다이어그램이 화면에 계속 유지됩니다. 스테이지를 한 번 구성하고(얇은 선으로 연결된 상자, 버킷, 파일, 요청 경로) 나레이션이 진행됨에 따라 계속 변경하세요. 모든 포인트마다 새로운 레이아웃으로 자르는 것은 영상을 슬라이드처럼 느껴지게 만듭니다. 하나의 스테이지를 유지하는 것이 핵심 트릭입니다.
- 하단에 상태 필(pill). 점과 짧은 텍스트 줄이 있는 작은 둥근 필로, 각 단계마다 업데이트됩니다. 예: "캐시 먼저 확인" 또는 "set-UID 복귀". 이야기를 전달합니다.
- 실제 창처럼 보이는 UI 카드. 둥근 어두운 카드, 얇은 테두리, 작은 아이콘이 있는 헤더, 굵은 제목과 회색 부제목, 구분선, 그다음 내용.
- 기술적인 내용에는 고정폭 글꼴, 제목에는 깔끔한 산세리프. 각 장면에는 굵은 제목 위에
02 · 런타임과 같은 작은 번호 레이블이 있습니다. - 아이디어를 객체로 보여줍니다. 채워지고 비워지는 토큰 버킷. 카드로서의 파일. 숫자 타일 행으로서의 권한 모드. 점 구름으로서의 인프라(캐시용 큐브, 데이터베이스용 실린더).
- 핵심 값에는 큰 숫자와 함께 칩, 토글,
// 접근법 1:스타일의 주석을 사용하여 옵션을 레이블링합니다. - 느리고 부드러운 움직임. 페이드, 슬라이드, 선 그리기, 부드러운 변형, 점 객체의 느린 회전. 카메라 흔들림이나 모든 곳에서 통통 튀는 팝업은 없습니다. 한 번에 한 가지만 움직이세요.
- 조용한 소리. 무언가 변할 때 부드러운 틱 소리, 공개 시 작은 차임, 주요 포인트에서 낮은 음, 목소리 아래에 조용한 배경 음악.
- 나레이션이 이끕니다. 각 문장은 화면에서 무언가를 바꿔야 하지만, 차분하게.
싸구려로 보이게 만드는 것들
- 상단의 제목 표시줄, 단색 배경, 페이드 인되는 글머리 기호. 그건 슬라이드쇼입니다.
- 아무것도 이어받지 않고 모든 장면에서 완전히 새로운 레이아웃.
- 많은 밝은 색상, 카메라 흔들림, 막대기 인물, 튀는 텍스트.
- manim의
Flash와Circumscribe. 점선이 렌더링 결함처럼 보입니다. 대신 자라나고 사라지는 일반 링을 사용하세요. - manim의
t2c로 코드 색칠하기. 고정폭 글꼴에서 다음 글자로 색이 번집니다. 각 색상 토큰을 별도의Text객체로 만드세요. - 순수 검정 배경에 채도 높은 빨강 또는 초록. H.264 압축이 주변에 반점을 추가합니다. 더 부드럽고 밝은 색조(예:
#ff7b72,#56d364,#539bf5)를 사용하고, 축소하기 전에 2배 크기로 렌더링하세요. - 화면에서 아무것도 움직이지 않는 동안 계속 말하는 나레이션.
파이프라인
uv venv --python 3.12 및 uv pip install manim kokoro-onnx soundfile numpy faster-whisper로 설정하세요. Python 3.14는 이 중 일부에 너무 새롭습니다. ffmpeg와 JetBrains Mono, Noto Sans 글꼴도 필요합니다. LaTeX는 사용하지 말고 manim의 Text를 사용하세요.
- 스크립트.
script.py는 각각 키, 제목, 소리 내어 읽도록 작성된 짧은 나레이션을 가진 장면 목록을 보관합니다. - 음성. Kokoro(음성
am_michael, 속도 약 0.95)가 장면당 하나의 wav 파일과 길이가 포함된durations.json을 만듭니다. - 장면. 각 장면은
theme3.py에 있는 엔진의Base를 서브클래싱합니다. 나레이션 길이만큼 실행되고,self.sfx(name)으로 사운드 큐를 로깅하며,self.finish()로 끝납니다. - 자막. faster-whisper가 단어 타이밍을 제공하며, 이는 ASS 파일의 가라오케 자막이 됩니다. whisper에 파일 경로 대신 16kHz numpy 배열을 전달하세요. 파일 디코더가 깨질 수 있기 때문입니다. Whisper는 종종 첫 단어를 0초에 배치하므로, 음성이 실제로 시작하는 지점을 측정하고 각 장면을 그에 맞게 이동하세요.
- 사운드.
sfx.py가 로깅된 큐 시간에 생성된 효과음을 배치하고 부드러운 배경 음악을 추가합니다. - 조립. 각 장면의 비디오를 오디오 길이만큼 패딩하고, 장면을 연결하고, 나레이션 아래에 효과와 음악을 믹스한 다음, 자막을 입힙니다. 2560x1440으로 렌더링하고 1920x1080으로 축소합니다.
작업 확인
먼저 저화질 패스를 빠르게 렌더링하세요. 각 장면의 마지막 프레임을 연락처 시트로 가져와 살펴보세요. 겹치거나, 가장자리를 벗어나거나, 카드 뒤에 숨는 것이 있으면 수정하세요(그 위에 놓일 것들보다 먼저 카드를 그립니다). 그런 다음 전체 렌더링을 수행합니다. 마지막에 비디오, 오디오 및 자막 트랙의 길이가 같은지, 오디오가 무음이 아닌지 확인하고, 컬러 영역을 전체 크기로 잘라 반점이 있는지 확인하세요.
정확한 헬퍼 코드와 ffmpeg 명령어는 references/pipeline.md와 engine/ 폴더에 있습니다.