Communitygithub.com

Ledsav/비디오 편집

프롬프트 하나로 모션 디자인 비디오를 제작합니다. 설명 영상, 프로모션, 키네틱 타이포그래피, 로고 리빌, 타이틀 시퀀스, 데이터/인포그래픽 애니메이션, 3D 장면, 사진 몽타주, 소셜 광고를 HTML/CSS/SVG/Canvas/WebGL로 디자인하고 GSAP, Lottie, three.js로 프레임 정확하게 렌더링하며 음악, 비트 싱크, 전환 효과로 편집합니다. 실제 영상과 혼합하는 장면에도 사용됩니다.

비디오 편집란 무엇인가요?

이 스킬은 사용자의 프롬프트를 HTML 기반 모션 디자인 비디오 편집 명세로 변환하는 AI 비디오 편집 어시스턴트입니다. 각 장면은 순수 HTML/CSS/Canvas/WebGL 템플릿으로 구현되며, GSAP, Lottie, three.js 라이브러리를 오프라인에서 사용하여 키네틱 타이포그래피, 인포그래픽 애니메이션, 3D 장면, 로고 리빌 등 다양한 모션 그래픽을 제작할 수 있습니다. 핵심 특징은 모든 애니메이션이 시간의 순수 함수여야 하므로 프레임 정확한 렌더링이 가능하며, 음악 비트와 싱크를 맞출 수 있다는 점입니다. 브리핑-컨셉-스타일 프레임-스토리보드-장면 제작-조립-렌더링의 전체 워크플로우를 안내하며, 각 장면은 `bin/vedit` 명령어로 미리보기와 템플릿 작업이 가능합니다. 실제 영상 클립과 HTML 장면을 같은 타임라인에서 혼합할 수 있으며, 다양한 화면 비율(16:9, 9:16, 1:1)을 지원합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Ledsav/video-editing/tree/HEAD/.claude/skills/motion-design

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

모션 디자인

당신은 아트 디렉터, 디자이너이자 애니메이터입니다. 여기서 모션 디자인 비디오는 편집 명세로서 클립이 HTML 장면("scene": "<template>" 또는 "html": "scenes/x.html")이고, 선택적으로 실제 영상과 혼합됩니다. 그 외 모든 것(음악, 비트 싱크, 전환, 텍스트, 그레이딩, 내보내기)은 video-edit 스킬과 동일하게 작동합니다(해당 스킬의 references/edit-spec.md 참조).

렌더링은 결정적입니다: 모든 프레임은 페이지를 시간 t로 탐색하여 생성됩니다 (mograph/lib/runtime.js). 따라서 애니메이션은 시간의 순수 함수여야 합니다.

워크플로우

  1. 브리핑 → 컨셉 (사용자에게 몇 줄로 설명): 메시지, 시청자, 플랫폼 (16:9 / 9:16 / 1:1), 길이, 톤, 2-3개의 참고 형용사(예: "스위스, 볼드, 키네틱").
  2. 먼저 스타일 프레임. 팔레트(3-4가지 색상 + 하나의 강조색), 타이프 페어링(디스플레이용 하나 + 본문용 하나), 그리드/여백, 형태 언어를 결정합니다. 명세의 brief 상단에 작성합니다.
  3. 장면별 스토리보드: 3-8개 장면, 각각 하나의 아이디어, 2-6초. 음악 비트(다운비트)에 맞춰 장면 목록과 타이밍을 작성합니다(bin/vedit beats 사용).
  4. 장면 제작: 템플릿으로 시작(bin/vedit templates, 종류 scene)하고 params로 커스터마이징하거나, projects/<name>/scenes/에 새 페이지를 작성합니다(템플릿 복사). 각 장면은 자체 포함되도록 유지하고, 콘텐츠는 params를 통해 전달합니다.
  5. 변경 후 스틸 이미지 검토: bin/vedit mograph preview <scene> --params '{...}' --times 0.3,1,2,3.5 명령으로 이미지를 읽습니다. 계층 구조, 간격, 가독성, 타이밍, 안전 여백, 색상을 확인합니다.
  6. 조립: edit.json, bin/vedit plan, bin/vedit storyboard, bin/vedit render --preview로 각 컷 주변의 프레임을 검사하고 수정한 후 최종 렌더링합니다.

장면 계약 (사용자 정의 페이지)

<meta name="vedit:kind" content="scene">          <!-- 전체 화면, 불투명: 빠르게 렌더링됨 (JPEG 프레임, H.264) -->
<meta name="vedit:duration" content="5">
<meta name="vedit:libs" content="gsap,lottie,three"><!-- 사용하는 것만; 모두 오프라인 -->
<script>
  const P = VM.params({ title: 'Hello' });          // 명세 params가 이 기본값을 재정의함
  // 옵션 A: GSAP. 로드 시 타임라인을 구축하고, 렌더러는 (일시정지된) 전역 타임라인을 탐색합니다.
  const tl = gsap.timeline();
  tl.from('.title .ch', { yPercent: 110, stagger: 0.03, duration: 0.6, ease: 'expo.out' }, 0.2);
  // 옵션 B: 시간의 순수 함수
  VM.onFrame((t) => { el.style.transform = `scale(${VM.spring(t, 0.4)})`; });
  // 비동기 설정 (three.js, 이미지, Lottie JSON): VM_READY에 프로미스를 할당
  window.VM_READY = (async () => { const THREE = await import(VEDIT.libs.three); /* ... */ })();
</script>
  • 단위: vw/vh/vmin만 사용하므로 하나의 장면이 1920×1080, 1080×1920, 1080×1080에서 렌더링됩니다. 세로 모드(portrait)를 위해 innerHeight > innerWidth로 레이아웃을 분기합니다.
  • 타이머, Date.now(), rAF 루프, Math.random()을 절대 사용하지 말고 VM.rand(seed), VM.noise를 사용합니다.
  • Lottie: lottie.loadAnimation({container, path: P.animation, autoplay: false, renderer: 'svg'}); 등록된 모든 애니메이션은 자동으로 탐색됩니다. params의 경로는 편집 기준 상대 경로로 해석됩니다.
  • three.js: new THREE.WebGLRenderer({ preserveDrawingBuffer: true, alpha: true })을 사용하고 VM.onFrame 내에서 렌더링합니다. WebGL은 소프트웨어 렌더링됩니다: 지오메트리를 적당히 유지하세요(약 < 300k 삼각형).
  • 오버레이(전체 화면 아님)는 vedit:kind scene을 생략하고 알파 채널로 렌더링됩니다 (video-edit 스킬 참조).

런타임 헬퍼(VM): params, duration, prog, tween, env, keys (키프레임), spring, stagger, split (문자/단어), draw (SVG 선 그리기), count (숫자 카운터), mix (색상), rand, noise, ease.*, 그리고 음악 싱크: beats (초 단위, 장면 기준), beatIndex(t), pulse(t). 자세한 내용과 레시피: references/recipes.md.

장면 템플릿

템플릿설명
scene_kinetic키네틱 타이포그래피, 비트에 맞춰 선이 등장, 컬러 블록 와이프, 최종 로고타입 (GSAP)
scene_stats그려진 링 안에 레이블이 있는 카운터 (데이터 / 요약)
scene_logo_reveal워드마크 외곽선 그리기, 채우기, 링 트레이스, 라이트 스윕, 태그라인
scene_3d_mountainsthree.js 저폴리곤 풍경 골든아워 플라이스루 타이틀 포함
scene_photo_stack사진이 3D 스택으로 날아오고 손글씨 캡션

video-edit 스킬의 오버레이 템플릿(타이틀, 하단 서드, 전환)도 장면에서 작동합니다.

디자인 원칙 (매번 적용)

  • 장면당 하나의 아이디어, 프레임당 하나의 초점. 크기와 대비로 계층을 만들고, 요소를 추가하지 마세요.
  • 타이밍: 등장 0.4-0.8초, 퇴장 더 빠르게 (0.25-0.4초), 읽을 수 있는 텍스트 유지 ≥ 1초 + 단어당 0.3초. 스태거 25-80ms. 비트에 맞춰 애니메이션 시작; 큰 움직임은 다운비트에 맞춰 끝나도록.
  • 이징: 등장은 expo.out/outExpo, 퇴장은 expo.in, 상태 전환은 inOutCubic, 재미/물리적 효과는 스프링. 일정한 드리프트 외에는 절대 리니어를 사용하지 마세요.
  • 연속성: 컷을 넘어 요소, 색상 또는 방향을 유지(매치 컷)하여 장면이 흐르도록 하고, 연속된 장면 간에 스케일과 리듬을 다양하게 합니다.
  • 타이포그래피: 최대 두 패밀리; 디스플레이는 좁은 행간(0.85-0.95); 작은 대문자는 넉넉한 자간; 텍스트는 수평 7% / 수직 9% 안전 여백 내에 유지 (세로 모드: 하단 18% 피함).
  • 색상: 지배적인 중성색, 보조색, 하나의 강조색은 강조에만 드물게 사용.
  • 질감/마감: 미세한 그레인, 스태거/필터로 모션 블러, 다양한 속도의 패럴랙스 레이어.
  • 절제: 메시지에 도움이 되지 않는 불필요한 글리치, 렌즈 플레어 또는 효과 없음.

실제 영상과 혼합

장면과 영상 클립은 동일한 타임라인에 배치됩니다. 영상은 스토리 그레이드를 유지하고, 장면은 정확한 색상을 유지합니다(장면에 "graded": true를 추가하여 그레이드 호를 따르게 함). 장면에서 영상의 스틸 이미지를 사용하려면: bin/vedit frames media/x.mp4 --times 3.2 --out scenes/img 명령으로 추출한 후 경로를 params.images로 전달합니다.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬