Skip to content
ppt-to-video-workflow logo

PPT to Video Workflow

ppt-to-video-workflow

PPT/슬라이드를 나레이션과 자막이 포함된 영상으로 변환합니다. PPTX 파일 또는 slides.json에서 슬라이드 이미지를 추출/렌더링하고, TTS로 나레이션을 생성하며, 자막을 추가하여 최종 MP4 영상을 만듭니다. "PPT를 영상으로 만들어줘", "발표 영상 생성", "자막 포함 영상 만들기" 요청 시 사용합니다.

SKILL.md

Full skill instructions

PPT to Video Workflow

PPT/슬라이드를 나레이션과 자막이 포함된 영상으로 변환하는 종합 스킬입니다.

트리거

다음과 같은 요청 시 이 스킬을 사용합니다:

  • "PPT를 영상으로 만들어줘"
  • "슬라이드 영상 생성해줘"
  • "발표 영상 만들어줘"
  • "나레이션이 포함된 영상 생성"
  • "자막 포함 영상 만들어줘"
  • "PPTX 파일을 영상으로 변환"

전체 워크플로우

┌─────────────────────────────────────────────────────────────────────┐
│                        입력 소스 (택1)                               │
├─────────────────────────────────────────────────────────────────────┤
│  [PPTX 파일]              또는           [slides.json]              │
│       │                                       │                     │
│       ▼                                       ▼                     │
│  이미지 추출 (python-pptx)          슬라이드 렌더링 (Pillow)         │
│       │                                       │                     │
│       └───────────────┬───────────────────────┘                     │
│                       ▼                                             │
│              slide_01.png, slide_02.png, ...                        │
└─────────────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────────────┐
│                      나레이션 생성                                   │
├─────────────────────────────────────────────────────────────────────┤
│  [slides.json + reference_audio.wav]                                │
│       │                                                             │
│       ▼                                                             │
│  Chatterbox TTS API (슬라이드별 음성 생성)                          │
│       │                                                             │
│       ▼                                                             │
│  narration_01.mp3, narration_02.mp3, ... + timing.json              │
└─────────────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────────────┐
│                      자막 생성 (선택)                                │
├─────────────────────────────────────────────────────────────────────┤
│  [timing.json]                                                      │
│       │                                                             │
│       ▼                                                             │
│  문장 분할 + ASS 자막 생성                                          │
│       │                                                             │
│       ▼                                                             │
│  subtitle.ass                                                       │
└─────────────────────────────────────────────────────────────────────┘
                        │
                        ▼
┌─────────────────────────────────────────────────────────────────────┐
│                      영상 합성                                       │
├─────────────────────────────────────────────────────────────────────┤
│  [slide_*.png + narration_*.mp3 + subtitle.ass]                     │
│       │                                                             │
│       ▼                                                             │
│  FFmpeg (페이드 전환 + 자막 하드코딩)                               │
│       │                                                             │
│       ▼                                                             │
│  final_video.mp4                                                    │
└─────────────────────────────────────────────────────────────────────┘

입력 형식

옵션 1: PPTX 파일

기존 PPTX 파일에서 슬라이드 이미지를 추출합니다.

from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE
from PIL import Image
import io

prs = Presentation("presentation.pptx")
for i, slide in enumerate(prs.slides):
    for shape in slide.shapes:
        if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
            image = Image.open(io.BytesIO(shape.image.blob))
            image.save(f"slide_{i+1:02d}.png")

옵션 2: slides.json

구조화된 JSON에서 슬라이드를 렌더링합니다.

{
  "slides": [
    {
      "slide": 1,
      "title": "슬라이드 제목",
      "content": ["항목1", "항목2", "항목3"],
      "narration": "이 슬라이드에서 읽을 전체 대본 텍스트입니다."
    }
  ]
}

필수 파일

  • reference_audio.wav: 음성 클로닝을 위한 참조 음성 (3-10초)

스크립트

1. render_slides.py

slides.json을 1920x1080 이미지로 렌더링합니다.

# Academic 테마 (기본, 흰색 배경)
python scripts/​render_slides.py slides.json -i generated_images/ -o rendered_slides/

# RDF 다크 테마 (골드/청록 강조)
python scripts/​render_slides.py slides.json -i generated_images/ -o rendered_slides/ -t rdf

옵션:

  • -i, --images: AI 생성 이미지 디렉토리
  • -o, --output: 출력 디렉토리
  • -t, --theme: 테마 선택 (academic 또는 rdf)

출력: rendered_slides/​slide_01.png, slide_02.png, ...

2. generate_narration.py

슬라이드별 TTS 음성을 생성합니다.

python scripts/​generate_narration.py slides.json reference_audio.wav -o narrations/

옵션:

  • -o, --output: 출력 디렉토리
  • -l, --language: 언어 코드 (기본: ko)

출력:

  • narrations/​narration_01.mp3, narration_02.mp3, ...
  • narrations/​timing.json (시간 정보 + 전체 텍스트)

timing.json 구조:

{
  "total_slides": 17,
  "total_duration": 374.96,
  "slides": [
    {
      "slide": 1,
      "audio_file": "narrations/​narration_01.mp3",
      "duration": 11.76,
      "text": "전체 나레이션 텍스트..."
    }
  ]
}

3. generate_subtitles.py

timing.json에서 ASS 자막 파일을 생성합니다.

python scripts/​generate_subtitles.py narrations/​timing.json -o subtitle.ass

자막 분할 규칙:

  • 한 자막당 최대 2줄
  • 줄당 최대 40자 (한글 기준)
  • 구두점(., !, ?) 기준 분할
  • 최소 2초 표시 시간 보장

출력: subtitle.ass

4. create_video.py

이미지와 나레이션을 합성하여 영상을 생성합니다.

# 기본 (자막 없음)
python scripts/​create_video.py rendered_slides/ narrations/ -o final_video.mp4

# 자막 포함
python scripts/​create_video.py rendered_slides/ narrations/ -o final_video.mp4 --subtitle

# 페이드 효과 없이
python scripts/​create_video.py rendered_slides/ narrations/ -o final_video.mp4 --no-fade

옵션:

  • -o, --output: 출력 파일명
  • --subtitle: 자막 포함 (ASS 파일 자동 생성)
  • --no-fade: 페이드 전환 효과 비활성화

출력:

  • final_video.mp4
  • final_video.ass (--subtitle 사용 시)

전체 워크플로우 예시

케이스 1: slides.json에서 영상 생성

# 1. 슬라이드 렌더링
python ~/​.claude/​skills/​ppt-to-video-workflow/​scripts/​render_slides.py \
    slides.json -i generated_images/ -o rendered_slides/ -t rdf

# 2. 나레이션 생성
python ~/​.claude/​skills/​ppt-to-video-workflow/​scripts/​generate_narration.py \
    slides.json reference_audio.wav -o narrations/

# 3. 영상 합성 (자막 포함)
python ~/​.claude/​skills/​ppt-to-video-workflow/​scripts/​create_video.py \
    rendered_slides/ narrations/ -o presentation.mp4 --subtitle

케이스 2: PPTX 파일에서 영상 생성

# 1. PPTX에서 이미지 추출
from pptx import Presentation
from pptx.enum.shapes import MSO_SHAPE_TYPE
from PIL import Image
import io, os

os.makedirs("pptx_slides", exist_ok=True)
prs = Presentation("presentation.pptx")

for i, slide in enumerate(prs.slides):
    for shape in slide.shapes:
        if shape.shape_type == MSO_SHAPE_TYPE.PICTURE:
            img = Image.open(io.BytesIO(shape.image.blob))
            img = img.resize((1920, 1080), Image.LANCZOS)
            img.save(f"pptx_slides/​slide_{i+1:02d}.png")
            break
# 2. 나레이션 생성 (slides.json 필요)
python ~/​.claude/​skills/​ppt-to-video-workflow/​scripts/​generate_narration.py \
    slides.json audio.wav -o narrations/

# 3. 영상 합성
python ~/​.claude/​skills/​ppt-to-video-workflow/​scripts/​create_video.py \
    pptx_slides/ narrations/ -o output.mp4 --subtitle

케이스 3: 기존 영상에 자막만 추가

# 1. 자막 파일 생성
python ~/​.claude/​skills/​ppt-to-video-workflow/​scripts/​generate_subtitles.py \
    narrations/​timing.json -o subtitle.ass

# 2. FFmpeg로 자막 하드코딩
ffmpeg -i input.mp4 -vf "ass=subtitle.ass" -c:a copy output_with_subtitle.mp4

테마

Academic (기본)

  • 흰색 배경
  • 빨간색 강조 (#DC3545)
  • 얇은 상단 바
  • 심플한 불릿 포인트

RDF Dark Theme

  • 다크 헤더 (#1A1A1A) + 격자 도트 패턴
  • 골드 강조 (#F5A623)
  • 청록 보조 (#4ECDC4)
  • 골드 세로바 섹션 제목
  • 이미지에 그림자 효과
  • 청록색 하단 바

설정

항목값
해상도1920x1080 (Full HD)
FPS30
영상 형식MP4 (H.264 + AAC)
전환 효과페이드 (0.5초)
한글 폰트AppleSDGothicNeo, NanumGothic
테마academic, rdf
자막 형식ASS (Advanced SubStation Alpha)
자막 폰트AppleSDGothicNeo-Medium (42pt)
자막 위치하단 중앙
자막 배경반투명 검정 (50% opacity)

의존성

pip install pillow pydub gradio-client python-pptx
  • Python 3.x
  • Pillow: 이미지 렌더링
  • FFmpeg: 영상 합성 (시스템 설치 필요)
  • pydub: 오디오 처리
  • gradio-client: Chatterbox TTS API
  • python-pptx: PPTX 파일 처리

디렉토리 구조

ppt-to-video-workflow/
├── SKILL.md                    # 이 문서
└── scripts/
    ├── render_slides.py        # 슬라이드 → 이미지 렌더링
    ├── generate_narration.py   # TTS 나레이션 생성
    ├── generate_subtitles.py   # ASS 자막 생성
    └── create_video.py         # 영상 합성

관련 스킬

  • academic-ppt-generator: slides.json 생성 및 PPTX 변환
  • chatterbox-tts-workflow: TTS 생성 (단일 파일)

예상 결과물

입력:

  • slides.json (제목, 내용, 나레이션)
  • reference_audio.wav (참조 음성)

출력:

  • slide_*.png (슬라이드 이미지들)
  • narration_*.mp3 (슬라이드별 음성)
  • timing.json (타이밍 정보)
  • subtitle.ass (자막 파일)
  • final_video.mp4 (최종 영상)

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View