TrendShift 딥다이브 · 2026-07-01

video-use 딥다이브
— 클로드 에이전트가 영상을 읽고 직접 편집하다

video-use대화형 AI 코딩 에이전트 스킬이다. 원본 영상 파일을 폴더에 넣고 Claude Code에게 "런치 영상으로 편집해줘"라고 말하면, 에이전트가 직접 전사·편집·컬러그레이딩·자막 생성·렌더링을 수행해 final.mp4를 내놓는다. 핵심 아이디어는 LLM이 영상 프레임을 직접 보는 대신 12KB 텍스트 전사(transcript) + 필요 시점에만 PNG 비주얼로 영상을 이해한다는 것이다. 30,000 프레임 × 1,500 토큰 = 4,500만 토큰 대신 수십 킬로바이트의 텍스트로 해결한다. (저장소: browser-use/video-use · Python + ffmpeg · MIT 라이선스)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 하드웨어 / 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

이 저장소가 대체 무엇인가.

핵심 메시지

"30,000 프레임을 볼 필요 없다 — LLM은 텍스트로 영상을 편집한다."

video-use는 Claude Code(또는 다른 AI 코딩 에이전트)에 장착하는 영상 편집 스킬 플러그인이다. 영상 편집의 전 과정 — 불필요한 침묵/필러워드 제거, 컬러 그레이딩, 자막 생성, 애니메이션 오버레이 합성 — 을 에이전트가 대화를 통해 처리한다. 사용자는 유튜브 편집자처럼 타임라인 UI를 다룰 필요 없이 "이 부분 잘라줘", "더 영화적으로 만들어줘"처럼 말로 지시한다.

기술적 핵심은 텍스트 우선 설계: ElevenLabs Scribe로 단어 단위 타임스탬프를 뽑아 12KB짜리 텍스트 파일로 압축한 뒤, LLM이 그 텍스트에서 컷 포인트를 결정한다. 시각 정보는 결정이 불확실할 때만 PNG 한 장씩 요청한다.

용어
에이전트 스킬(Agent Skill)
Claude Code처럼 LLM 기반 코딩 에이전트가 사용할 수 있는 도구 모음. SKILL.md 파일이 "이 스킬의 사용법"을 설명하고, helpers/ 폴더의 Python 스크립트들이 실제 작업(전사, 렌더링 등)을 처리한다. 에이전트는 SKILL.md를 읽고 어떤 helper를 어떤 순서로 실행할지 스스로 결정한다.

2왜 주목받는가

트렌딩 이유 · 경쟁 대비 장점.

browser-use 팀이 만들었고, "에이전트가 영상 편집을 한다"는 컨셉 자체가 화제가 됐다. browser-use는 이미 "LLM이 브라우저를 제어한다"로 큰 주목을 받은 팀인데, 같은 철학을 영상 편집에 적용했다.

왜 지금 주목받는가

이유설명
에이전트 시대Claude Code, Codex 등 코딩 에이전트가 실용화되면서 "에이전트로 무엇을 할 수 있나" 탐색이 활발. 영상 편집은 전형적인 반복 작업이다.
토큰 효율 설계"30,000 프레임 × 1,500 토큰 = 4,500만 토큰 대신 12KB 텍스트"라는 수치가 명확해 개발자들의 공감을 샀다.
browser-use 브랜드browser-use 팀의 신뢰도와 실용적 오픈소스 문화 덕에 출시 직후 스타가 빠르게 쌓였다.
100% 오픈소스ElevenLabs API 키 하나만 있으면 완전히 자기 서버에서 돌릴 수 있다. 영상 편집 SaaS가 아닌 개인 에이전트 스킬이다.

경쟁 도구와의 비교

도구방식video-use 대비
Adobe Premiere / DaVinci Resolve전문 GUI 타임라인 편집전문 지식 필요, 반복 작업(필러 제거 등)은 수동
Descript텍스트 기반 편집 SaaS클라우드 의존, 구독 비용, 자동화 한계
CapCut AI모바일 자동 편집커스터마이징 불가, 에이전트와 대화 불가, 소스 코드 없음
video-use에이전트 스킬, 대화형 편집자연어 지시, 완전 자동화, 오픈소스, 로컬 실행 가능
핵심 차별점
LLM이 영상을 "보지 않고" 이해하는 토큰 효율 설계

browser-use가 LLM에게 브라우저 DOM(구조화 텍스트)을 주는 것처럼, video-use는 LLM에게 단어별 타임스탬프 텍스트를 준다. 비싼 비전 모델 없이 텍스트 모델만으로 정밀한 컷 편집이 가능하다. 시각 확인이 필요한 순간에만 PNG를 한 장 요청하는 "온디맨드 비주얼" 전략이 독창적이다.

현실적 주의사항
ElevenLabs Scribe API 비용 발생 (전사 필수)

모든 전사(transcription)는 ElevenLabs Scribe API를 통해 이루어진다. 무료 tier가 있지만 분량이 많으면 비용이 발생한다. 전사는 소스 파일당 1회만 수행되고 결과를 캐싱하므로, 같은 소스를 반복 편집해도 추가 비용은 없다.

3기술 스택 전체 지도

실제 pyproject.toml과 소스코드 기반으로 확인한 의존성.

핵심 의존성 (pyproject.toml 기준)

패키지역할사용 위치
requestsElevenLabs Scribe API HTTP 호출helpers/transcribe.py
numpy오디오 PCM 데이터 처리, RMS 엔벨로프 계산helpers/timeline_view.py, grade.py
Pillow (PIL)필름스트립 이미지 합성, 파형 시각화 PNG 생성helpers/timeline_view.py
matplotlib오디오 파형 플롯 렌더링helpers/timeline_view.py
librosa (선택)고급 오디오 분석 (없으면 wave 모듈로 폴백)helpers/timeline_view.py
manim (선택)수학/코드 애니메이션 오버레이 생성skills/manim-video/

외부 도구 (시스템 설치)

도구역할필수 여부
ffmpeg / ffprobe영상 인코딩·디코딩·컬러 그레이딩·자막 합성·오디오 추출 전반필수
ElevenLabs Scribe API단어별 타임스탬프 + 화자 분리 전사필수 (API 키)
yt-dlpYouTube 등 온라인 소스 다운로드선택
Node.js 22+ / npmHyperFrames, Remotion 애니메이션 슬롯선택 (애니메이션 시)
uv (또는 pip)Python 의존성 관리설치 시 필요

애니메이션 생성 엔진 (선택적 확장)

엔진특징사용 케이스
HyperFramesJavaScript 기반, npx로 즉시 사용Motion graphics, 타이틀 카드
RemotionReact 기반 영상 생성 프레임워크복잡한 인포그래픽, 데이터 시각화
Manim수학 시각화 특화 Python 라이브러리교육 영상, 수식 애니메이션
PIL (Pillow)정적 이미지 합성간단한 자막 오버레이, 배경 이미지
비유로 이해하기

ffmpeg는 이 프로젝트의 "손"이다. 두뇌(LLM)가 "3초~7초 구간을 잘라서 따뜻한 색감으로 바꿔줘"라고 결정하면, ffmpeg가 실제로 영상 파일을 자르고 필터를 적용하고 붙인다. Python 코드는 LLM의 결정을 ffmpeg 명령어로 번역하는 통역사 역할을 한다.

ElevenLabs Scribe는 "귀"다. 영상에서 오디오를 추출해 단어마다 "이 단어는 2.52초~3.18초에 화자 0이 말했다"는 정밀 정보를 준다.

4아키텍처 심화 분석

실제 코드에서 확인한 시스템 구조도와 설계 패턴.

┌──────────────────────────────────────────────────────────────────────┐ │ 사용자 ↔ 에이전트 대화 루프 │ │ │ │ 사용자: "이 영상들 10분짜리 튜토리얼로 만들어줘" │ │ ↓ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 에이전트 (Claude Code + SKILL.md) │ │ │ │ ① 전략 제안 → 사용자 확인 대기 │ │ │ │ ② 확인 후 실행 시작 │ │ │ └──────────┬──────────────────────────────────────────┘ │ │ │ │ │ ┌─────────┼──────────────────────────────────────┐ │ │ │ Layer 1│ 텍스트 분석 (항상 로드) │ │ │ │ ↓ │ │ │ │ transcribe.py ──→ ElevenLabs Scribe API │ │ │ │ (ffmpeg로 mono 16kHz WAV 추출 후 업로드) │ │ │ │ ↓ │ │ │ │ pack_transcripts.py ──→ takes_packed.md (~12KB) │ │ │ │ [002.52-005.36] S0 "Ninety percent..." │ │ │ │ [006.08-006.74] S0 "We fixed this." │ │ │ └─────────┬──────────────────────────────────────┘ │ │ │ LLM이 takes_packed.md 읽고 컷 결정 │ │ ┌─────────┼──────────────────────────────────────┐ │ │ │ Layer 2│ 비주얼 확인 (결정 포인트에서만) │ │ │ │ ↓ │ │ │ │ timeline_view.py ──→ 필름스트립+파형 PNG │ │ │ │ (ffmpeg로 N개 프레임 추출 + numpy/PIL 합성) │ │ │ └─────────┬──────────────────────────────────────┘ │ │ │ edl.json 작성 │ │ ┌─────────▼──────────────────────────────────────┐ │ │ │ 렌더링 파이프라인 (render.py) │ │ │ │ │ │ │ │ ① 세그먼트별 추출 (grade.py로 컬러 그레이딩) │ │ │ │ + 30ms 오디오 페이드 적용 │ │ │ │ ② 무손실 concat (-c copy) │ │ │ │ ③ 애니메이션 오버레이 합성 (PTS 시프트) │ │ │ │ ④ 자막 합성 (subtitles 필터 LAST) │ │ │ │ ⑤ loudnorm (음량 정규화) │ │ │ └─────────┬──────────────────────────────────────┘ │ │ │ │ │ ┌─────────▼──────────────────────────────────────┐ │ │ │ 자기 검증 루프 (Self-Eval, 최대 3회) │ │ │ │ timeline_view로 렌더된 출력의 각 컷 경계 확인 │ │ │ │ → 통과 시에만 사용자에게 preview.mp4 제시 │ │ │ └────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────────┘

핵심 설계 패턴 3가지

패턴 1

텍스트 우선 + 온디맨드 비주얼 (Text-First, Visual-on-Demand)

LLM이 영상 프레임을 직접 소비하지 않는다. ElevenLabs Scribe가 단어 단위 타임스탬프를 만들고, pack_transcripts.py가 0.5초 이상 침묵이나 화자 변경에서 구를 분리해 takes_packed.md로 압축한다. 1시간 분량도 12KB 텍스트 안에 들어간다. 시각 확인이 필요한 경우(애매한 포즈, 테이크 비교)에만 timeline_view.py로 PNG를 생성한다.

이는 browser-use의 "DOM 우선" 원칙과 동일하다. 스크린샷 1장 대신 구조화된 DOM을 주면 LLM이 훨씬 정확하고 저렴하게 작동한다.

패턴 2

2단계 렌더링: 세그먼트 추출 → 무손실 Concat

render.py는 세그먼트를 먼저 개별 추출해 컬러 그레이딩과 오디오 페이드를 각각 적용한 뒤(clips_graded/seg_00.mp4, ...), ffmpeg concat demuxer로 무손실 이어붙인다(-c copy). 이후 오버레이와 자막을 합성한다.

이 2단계 방식이 중요한 이유: 단일 패스로 처리하면 나중에 오버레이를 추가할 때 전체를 다시 인코딩해야 한다. 분리하면 오버레이 추가 시 concat된 base.mp4만 재처리한다 — 더 빠르고 화질 손실이 없다.

패턴 3

병렬 서브에이전트로 애니메이션 슬롯 처리

애니메이션 오버레이(HyperFrames, Remotion, Manim)가 여러 개 필요하면, 에이전트가 슬롯별로 서브에이전트를 병렬 생성한다. 각 서브에이전트는 독립된 animations/slot_<id>/ 디렉터리에서 작업하고, 전체 렌더링 시간 ≈ 가장 느린 슬롯 1개 시간이다. 순차 처리 대비 수 배 빠르다.

5디렉토리 구조 해부

실제 파일 트리와 각 파일의 역할.

video-use/ ← 레포 루트 (에이전트 스킬 디렉터리) ├── SKILL.md ← 에이전트용 사용 매뉴얼 (22,984 바이트) │ 에디터 규칙 12개, 파이프라인 절차, helper 목록 ├── install.md ← 최초 설치 가이드 (클론, ffmpeg, API키 등록) ├── pyproject.toml ← Python 패키지 정의 (requests, numpy, Pillow 등) ├── .env.example ← ELEVENLABS_API_KEY 환경 변수 템플릿 ├── poster.html ← 프로젝트 소개 포스터 (정적 HTML) │ ├── helpers/ ← 실제 편집 작업을 수행하는 Python 스크립트들 │ ├── transcribe.py ← 단일 영상 전사 (ffmpeg 오디오 추출 → Scribe API) │ ├── transcribe_batch.py ← 폴더 전체 병렬 전사 (4워커 동시 실행) │ ├── pack_transcripts.py ← JSON 전사들 → takes_packed.md (12KB 텍스트) │ │ 0.5초 침묵·화자 변경 기준으로 구(phrase) 분리 │ ├── timeline_view.py ← 필름스트립 + 파형 + 단어 레이블 PNG 생성 │ │ 결정 포인트에서만 호출 (스캔 루프 금지) │ ├── render.py ← EDL → 최종 MP4 렌더링 파이프라인 │ │ 세그먼트 추출 → concat → 오버레이 → 자막 │ └── grade.py ← ffmpeg 컬러 그레이딩 (프리셋 + 자동 보정) │ warm_cinematic, neutral_punch, auto 모드 │ ├── skills/ │ └── manim-video/ ← Manim 애니메이션 서브스킬 (SKILL.md 포함) │ └── static/ ├── video-use-banner.png ← 배너 이미지 (README용) └── timeline-view.svg ← 타임라인 뷰 다이어그램 (설명용)

실제 편집 세션의 출력물은 레포 내부가 아니라 영상 파일 옆 edit/ 폴더에 생성된다:

<videos_dir>/ ← 사용자의 원본 영상 폴더 ├── C0101.mp4 ← 원본 (절대 수정 안 함) ├── C0102.mp4 └── edit/ ← 모든 출력물이 여기에 ├── project.md ← 세션 메모리 (다음 세션에도 맥락 유지) ├── takes_packed.md ← LLM 주요 읽기 뷰 (12KB 텍스트) ├── edl.json ← 편집 결정 목록 (컷 구간, 그레이드, 오버레이) ├── transcripts/ ← 캐싱된 Scribe JSON (소스당 1회만 생성) │ ├── C0101.json │ └── C0102.json ├── animations/ ← 애니메이션 슬롯 │ └── slot_01/ ← 서브에이전트가 독립적으로 작업 ├── clips_graded/ ← 세그먼트별 추출본 + 그레이딩 적용 │ ├── seg_00.mp4 │ └── seg_01.mp4 ├── master.srt ← 출력 타임라인 기준 자막 ├── base.mp4 ← 무손실 concat 결과 ├── preview.mp4 ← 720p 빠른 미리보기 └── final.mp4 ← 최종 결과물

6학습 포인트 (기술별)

이 레포에서 무엇을 배울 수 있는가.

학습 포인트 1

ffmpeg 실전 활용 — 영상 편집의 스위스 아미 나이프

이 레포는 ffmpeg의 다양한 기능을 실제 프로덕션 코드에서 활용한다. 단순 포맷 변환을 넘어 필터 그래프(filtergraph), 자막 렌더링(libass), HDR→SDR 톤매핑(zscale+tonemap), 오디오 페이드(afade), 무손실 concat demuxer까지 다룬다.

배울 것: -vf 필터 체인 조합, -af 오디오 필터, HDR 소스 처리 (iphone 영상의 HLG/PQ 문제), concat demuxer 패턴, ffprobe로 메타데이터 파싱.

학습 포인트 2

LLM 에이전트 스킬 설계 — SKILL.md 패턴

SKILL.md는 LLM에게 "이 도구를 어떻게 사용해야 하는가"를 가르치는 문서다. 12개의 하드 룰과 그 이유를 함께 설명하고, 나머지는 "artistic freedom"으로 열어둔다. 이 설계는 LLM이 규칙을 외우는 것이 아니라 원칙을 이해하도록 유도한다.

배울 것: 에이전트 스킬 문서 작성법, "Ask → Confirm → Execute → Self-Eval → Persist" 패턴, 무엇을 하드 룰로, 무엇을 자유 재량으로 줄지 결정하는 설계 감각.

학습 포인트 3

오디오 신호처리 기초 — numpy로 파형 분석

timeline_view.pycompute_envelope()는 ffmpeg로 mono 16kHz PCM WAV를 추출한 뒤, numpy로 윈도우 RMS 엔벨로프를 계산한다. librosa 없이 표준 라이브러리 wave와 numpy만으로 오디오 분석을 구현했다.

배울 것: PCM 오디오 데이터 구조, RMS(Root Mean Square) 에너지 계산, 오디오 샘플링 레이트, numpy 배열 연산으로 신호처리.

학습 포인트 4

자동 컬러 그레이딩 — 데이터 기반 색보정

grade.py의 auto 모드는 ffmpeg로 영상 세그먼트에서 프레임들을 샘플링하고, 평균 밝기·RMS 대비·채도를 계산해 최적의 eq=contrast:brightness:saturation 필터 값을 수치로 도출한다. 최대 ±8% 범위로 제한해 "보정된 것처럼 안 보이게" 만든다.

배울 것: ffmpeg vf 컬러 필터 체인, 이미지에서 HSV(색조·채도·명도) 분석, 알고리즘적 색보정 원리, curves 필터로 S-커브 적용.

학습 포인트 5

ElevenLabs Scribe API — 단어별 전사

transcribe.py는 Scribe v1 모델에 timestamps_granularity=word, diarize=true, tag_audio_events=true를 설정해 단어마다 시작·끝 타임스탬프와 화자 ID를 반환받는다. 전사 결과는 소스별로 캐싱해 재실행 시 API를 다시 호출하지 않는다.

배울 것: Speech-to-Text API 설계, 화자 분리(diarization), 단어 레벨 타임스탬프 활용, API 응답 캐싱 패턴.

7하드웨어 / 시스템 요구사항

실제로 돌리려면 무엇이 필요한가.

항목최소권장비고
OSmacOS / LinuxmacOS (Apple Silicon)Windows는 공식 미지원 (WSL 가능)
Python3.10+3.12pyproject.toml 기준
RAM8 GB16 GB+4K 소스나 긴 영상 처리 시
디스크소스 크기 × 3× 5clips_graded/, preview/final 임시 파일
ffmpeg4.4+6.x+brew install ffmpeg (macOS)
에이전트Claude Code CLIClaude Code + Pro 플랜Codex, Hermes 등도 호환
API 키ElevenLabs 계정전사 필수. 무료 tier 있음
iPhone 영상 주의사항

최신 iPhone은 HLG HDR(Rec.2020) 포맷으로 촬영한다. render.pyis_hdr_source()로 이를 자동 감지하고 zscale+tonemap 체인으로 SDR Rec.709로 변환한다. 이 처리 없이 단순 비트 변환만 하면 업로드 후 색이 이상하게 보이는 문제가 생긴다.

설치 간소화
에이전트에게 설치를 시키면 된다

install.md에 나온 "Setup prompt"를 Claude Code에 붙여넣으면, 에이전트가 클론·의존성 설치·ffmpeg 설치·API 키 등록까지 스스로 진행한다. 사람이 직접 해야 하는 것은 ElevenLabs API 키를 붙여넣는 것뿐이다.

8직접 해볼 수 있는 실습 과제

손으로 해봐야 진짜 이해가 온다.

실습 1

ffmpeg 기초: 영상 자르기와 오디오 페이드 ★☆☆ 입문

video-use의 핵심 hard rule 중 하나인 "30ms 오디오 페이드"를 직접 구현해본다. 아무 영상 파일에서 특정 구간을 추출하면서 오디오 페이드를 적용한다.

# 5초~12초 구간 추출 + 30ms 오디오 페이드
ffmpeg -ss 5 -i input.mp4 -t 7 \
  -af "afade=t=in:st=0:d=0.03,afade=t=out:st=6.97:d=0.03" \
  -c:v copy output.mp4

페이드 없는 버전과 비교해 컷 경계에서 소리 차이를 들어보자. 페이드가 없으면 "뚝" 소리가 난다.

실습 2

pack_transcripts.py 동작 원리 분석 ★★☆ 중급

ElevenLabs Scribe API 없이도 pack_transcripts.py의 구조를 이해할 수 있다. 가상의 Scribe JSON을 직접 만들어 파이프라인을 테스트해보자.

# 가상 Scribe 응답 JSON 만들기 (edit/transcripts/test.json)
{
  "words": [
    {"type": "word", "text": "Hello", "start": 0.5, "end": 0.9, "speaker_id": "speaker_0"},
    {"type": "word", "text": "world", "start": 1.0, "end": 1.4, "speaker_id": "speaker_0"},
    {"type": "spacing", "start": 1.4, "end": 2.2},
    {"type": "word", "text": "Goodbye", "start": 2.2, "end": 2.8, "speaker_id": "speaker_1"}
  ]
}

# 실행
python helpers/pack_transcripts.py --edit-dir edit/

출력된 takes_packed.md를 보면서 0.5초 침묵과 화자 변경에서 구가 분리되는 것을 확인한다.

실습 3

grade.py 컬러 프리셋 비교 실험 ★★☆ 중급

같은 영상 클립에 4가지 컬러 프리셋을 각각 적용해 결과를 비교해본다. 코드에서 확인한 프리셋: subtle, neutral_punch, warm_cinematic, none.

# neutral_punch 프리셋으로 그레이딩
python helpers/grade.py input.mp4 -o output_neutral.mp4 --preset neutral_punch

# warm_cinematic (창작 용도)
python helpers/grade.py input.mp4 -o output_warm.mp4 --preset warm_cinematic

# auto 모드 (수치 기반 자동 보정)
python helpers/grade.py input.mp4 -o output_auto.mp4

# 분석 결과 확인 (적용할 필터 수치 출력)
python helpers/grade.py --analyze input.mp4
실습 4

간단한 EDL 작성 후 render.py로 영상 합치기 ★★★ 고급

Edit Decision List(EDL)를 직접 JSON으로 작성하고 render.py를 실행해 실제 영상 편집을 체험한다. 먼저 영상 파일의 길이를 ffprobe로 확인한 뒤 컷할 구간을 결정한다.

# ffprobe로 영상 메타데이터 확인
ffprobe -v quiet -print_format json -show_streams input.mp4

# edl.json 작성
{
  "source": "/path/to/input.mp4",
  "grade": "neutral_punch",
  "ranges": [
    {"start": 2.5, "end": 8.0},
    {"start": 15.3, "end": 22.7}
  ]
}

# 렌더링 실행
python helpers/render.py edl.json -o final.mp4 --no-subtitles
실습 5

실제 Claude Code로 영상 편집 세션 진행 ★★★ 고급

video-use를 실제로 설치하고 짧은 영상(1~2분)으로 전체 워크플로를 체험한다. ElevenLabs 무료 계정으로 시작할 수 있다.

# 1. 설치 (Claude Code에 setup prompt 붙여넣기)
# 2. 영상 폴더로 이동 후 claude 실행
cd ~/Desktop/my_videos
claude

# 3. 에이전트에게 지시
> "이 영상들을 분석하고 불필요한 침묵과 umm/uh를 제거해줘. 60초 이하로 편집해줘."

에이전트가 전략을 제안하고 승인을 기다린다. 승인하면 전사 → 편집 → 렌더링 → 자기검증까지 자동 진행된다.

9관련 기술 심화 학습 로드맵

이 레포를 발판으로 더 깊이 파고드는 경로.

주차주제핵심 학습 내용
1~2주차ffmpeg 기초포맷 변환, 코덱 이해(H.264/H.265), 필터 체인(-vf/-af), ffprobe로 메타데이터 파싱
3~4주차Python 오디오 처리wave 모듈, numpy로 PCM 처리, RMS 에너지, 샘플링 레이트, librosa 기초
5~6주차ffmpeg 고급필터 그래프(filter_complex), PTS/DTS 이해, concat demuxer, HDR 처리, libass 자막
7~8주차Speech API 활용ElevenLabs Scribe, OpenAI Whisper, 단어별 타임스탬프, 화자 분리(diarization)
9~10주차LLM 에이전트 설계SKILL.md 패턴, Tool use 설계, 에이전트 메모리(project.md), 자기검증 루프 구현
11~12주차애니메이션 엔진Manim 기초, Remotion(React 기반 영상 생성), HyperFrames, ffmpeg overlay 합성
학습 경로 조언

ffmpeg CLI를 먼저 손에 익히는 것이 가장 중요하다. Python 코드는 결국 ffmpeg 명령어를 조립하고 실행하는 래퍼다. ffmpeg 없이 코드를 보면 "왜 이렇게 하는지" 이해하기 어렵다. ffmpeg -filtersffmpeg -codecs로 사용 가능한 도구 목록을 파악하는 것부터 시작하자.

10핵심 키워드 사전

이 레포를 이해하는 데 필요한 용어 정리.

용어
EDL (Edit Decision List)
편집 결정 목록. "소스 파일의 A~B 구간을 가져다가 출력 타임라인의 어디에 놓아라"는 지시를 담은 데이터. video-use에서는 edl.json으로 표현된다. 에이전트가 취할 컷, 적용할 그레이드, 추가할 오버레이 정보가 모두 여기에 담긴다.
용어
Diarization (화자 분리)
여러 화자가 말할 때 누가 어느 구간에서 말했는지 자동으로 구분하는 기술. ElevenLabs Scribe가 제공한다. 각 단어에 speaker_0, speaker_1 같은 ID가 붙는다. pack_transcripts.py는 화자가 바뀌면 그 경계에서 구를 분리한다.
용어
PTS (Presentation Timestamp)
영상 프레임을 언제 화면에 표시할지 나타내는 타임스탬프. ffmpeg 필터 체인에서 오버레이 애니메이션의 PTS를 "출력 타임라인의 시작점"으로 시프트하지 않으면, 애니메이션이 처음부터 시작하지 않고 중간 프레임부터 표시된다. setpts=PTS-STARTPTS+T/TB가 이를 수정한다.
용어
RMS (Root Mean Square) 에너지
오디오 신호의 음량을 나타내는 수치. 각 샘플값의 제곱 평균의 제곱근. 0에 가까울수록 무음(침묵), 클수록 소리가 크다. timeline_view.py는 RMS 엔벨로프를 계산해 파형 시각화에 사용하고, 침묵 구간(RMS ≈ 0)을 컷 포인트 후보로 강조한다.
용어
libass
ffmpeg가 내장하는 SubStation Alpha(SSA/ASS) 자막 렌더링 라이브러리. video-use는 force_style 파라미터로 Helvetica Bold, 2단어 대문자 청크, MarginV=90(모바일 UI에 가리지 않는 위치) 등 자막 스타일을 정밀하게 제어한다. subtitles 필터가 libass를 통해 자막을 영상에 구워 넣는다.
용어
HLG / PQ (HDR 전달 함수)
HDR 영상의 밝기 정보를 인코딩하는 방식. HLG(Hybrid Log-Gamma)는 iPhone 기본 녹화 포맷, PQ(Perceptual Quantizer)는 HDR10. 이 포맷을 톤매핑 없이 8비트 SDR로 변환하면 색이 과포화·번짐 현상이 생긴다. render.py가 이를 자동 감지해 zscale 체인으로 처리한다.
용어
Loudnorm (음량 정규화)
ITU-R BS.1770 표준에 따라 영상 전체 음량을 일정 레벨(LUFS)로 맞추는 작업. 촬영 환경이 다른 여러 클립을 이어붙이면 음량이 들쭉날쭉해진다. render.py는 최종 합성 후 loudnorm 필터를 적용해 균일한 음량을 보장한다.

11참고 링크

더 깊이 파고들기 위한 자료들.