GitHub - DangJin/pdf2video: Transform PDF documents into engaging video presentations with smooth animations.
핵심 포인트
- 1`pdf2video`는 PDF 문서를 부드러운 애니메이션이 적용된 매력적인 비디오 프레젠테이션으로 변환하는 도구입니다.
- 2이 도구는 stack, focus, switch, fan 등 다양한 scene 타입을 제공하며, 스마트 애니메이션, 제목 시스템, 정보 바 등 풍부한 기능을 갖추고 있습니다.
- 3사용자는 기본 `props` 또는 사용자 지정 `script`를 통해 비디오 흐름을 제어할 수 있으며, Remotion 기반으로 제작되어 고품질 렌더링을 지원합니다.
pdf2video는 PDF 문서를 부드러운 애니메이션과 함께 매력적인 비디오 프레젠테이션으로 변환하는 오픈 소스 프로젝트입니다. 이 도구는 Remotion 프레임워크를 기반으로 하며, react-pdf를 사용하여 PDF 렌더링을 처리하고, pdfjs-dist로 PDF 파싱을 수행하며, Zod로 스키마 유효성 검사를 지원합니다. 비디오는 1920x1080 해상도, 30fps로 렌더링되며, 길이는 스크립트 구성에 따라 동적으로 결정됩니다.
핵심 기능 및 방법론:
pdf2video는 PDF 페이지를 동적인 비디오 시퀀스로 변환하기 위해 여러 가지 scene type과 스마트 애니메이션을 활용합니다.
- Multiple Scene Types (다중 씬 유형):
stack: PDF 페이지를 카드 스택 형태로 디스플레이하며, 진입(entrance) 애니메이션을 포함합니다. 기본 지속 시간은 60프레임입니다.focus: 특정 PDF 페이지를 추출하여 확대(zoom)하는 효과를 제공하며, 스크롤(scroll) 기능을 지원합니다. 이 씬에서는natural card spread(포커 카드처럼 자연스럽게 카드가 퍼지는 효과), 스크롤 전breathing effect, 스크롤 정지 시bounce effect와 같은 스마트 애니메이션이 적용됩니다. 기본 지속 시간은 120프레임입니다.focus된 페이지는high quality rendering을 위해 2배 해상도로 렌더링됩니다.switch: 페이지 간의 부드러운 슬라이드(slide) 전환 애니메이션을 구현합니다. 기본 지속 시간은 120프레임입니다.fan: PDF 페이지를 부채꼴 또는 휠(wheel) 형태로 배치하고, 회전 및 특정 페이지에 대한 포커스 효과를 제공합니다. 기본 지속 시간은 150프레임입니다.
scene type은 collapse animation을 통해 씬 간의 매끄러운 전환을 지원합니다.- Title System (타이틀 시스템):
- 비디오 시작 시
main title과subtitle이 표시됩니다. - 페이지를 보는 동안
persistent corner title(화면 구석에 지속적으로 표시되는 타이틀)이 유지됩니다. per-page custom titles기능을 통해 각 페이지에 고유한 타이틀을 설정할 수 있습니다.
- 비디오 시작 시
- Bottom Info Bar (하단 정보 바):
scene title은 타이핑 효과와 함께 표시됩니다.progress indicator(예: 1/5 형식)가 현재 진행 상황을 나타냅니다.customizable per-page descriptions를 통해 페이지별 상세 설명을 추가할 수 있으며, 이 또한 타이핑 효과로 표시됩니다.
- Ending Scene (엔딩 씬):
- 비디오의 마지막에는 PDF 스택이 왼쪽으로 이동하고, "Thank you" 메시지와 함께 오른쪽에 타이틀이 표시되며, 애니메이션 장식선이 추가됩니다.
- Dynamic Duration (동적 지속 시간):
- 스크립트(script) 구성에 명시된 각 씬의
duration값들을 합산하여 비디오의 전체 길이가 자동으로 계산됩니다.
- 스크립트(script) 구성에 명시된 각 씬의
- Background Music (배경 음악):
public/폴더에background.mp3파일을 배치하면, 자동으로 비디오 길이에 맞춰 재생되며, 시작 시 2초간fade-in, 종료 시 2초간fade-out효과가 적용됩니다.
사용자 지정 및 구성:
pdf2video는 두 가지 주요 구성 방식을 제공합니다.
- Basic Props (기본 속성):
- PDF 파일 경로(
src), 메인 타이틀(title), 서브타이틀(subtitle), 강조할 페이지 번호 배열(highlights), 페이지별 타이틀(pageTitles), 페이지별 설명(pageDescriptions) 등을props객체로 정의합니다. 이 방식은 미리 정의된 흐름에 따라 비디오를 생성합니다.
- PDF 파일 경로(
- Custom Script (커스텀 스크립트):
script배열을 사용하여 비디오의 흐름을 완전히 제어할 수 있습니다. 각 배열 항목은type(씬 유형:stack,focus,switch,fan), 특정 페이지 번호(page-focus,switch,fan씬에 해당), 그리고 해당 씬의 지속 시간(duration- 프레임 단위)을 포함하는 객체입니다. 이 방식은 사용자가 원하는 대로 씬의 순서와 지속 시간을 정밀하게 조정할 수 있게 합니다.
Claude Code Skill 통합:
이 프로젝트에는 Claude Code skill이 포함되어 있어, PDF-to-video 변환을 자동화할 수 있습니다. 스킬이 설치되면, "帮我把这个 PDF 转成展示视频:/path/to/document.pdf"와 같은 중국어 명령을 통해 Claude에게 PDF 파일 경로를 전달하면, Claude가 PDF 내용을 분석하여 핵심 요점과 페이지 타이틀을 추출하고, props.json 구성을 자동으로 생성한 다음 비디오를 렌더링합니다.
프로젝트 구조:
props/:props구성 파일이 저장됩니다 (예:example.json).public/: 정적 자산(PDF 파일, 배경 음악)이 위치합니다.out/: 렌더링된 비디오 출력이 저장됩니다 (예:example.mp4).src/: 주요 소스 코드 파일들을 포함합니다.index.ts: 진입점입니다.Root.tsx:Remotion의 루트 컴포넌트입니다.templates/PdfShowcase/: PDF 비디오 쇼케이스 템플릿의 핵심 컴포넌트들이 있습니다. (index.tsx,types.ts,PdfPage.tsx,StackScene.tsx,FocusScene.tsx,SwitchScene.tsx,FanScene.tsx,GridBackground.tsx,PersistentTitle.tsx,BottomInfo.tsx,EndingOverlay.tsx등).
이 프로젝트는 MIT 라이선스 하에 배포됩니다.