
폼핏 | 가로 영상 하나가 쇼츠·릴스·피드 5종이 됩니다
폼핏 | 가로 영상 하나가 쇼츠·릴스·피드 5종이 됩니다
가로로 찍은 영상 하나 놓고 쇼츠·릴스·인스타 피드에 맞춰 편집기를 다시 켜고
잘라본 적 있다면 안다, 화면비마다 피사체가 화면 밖으로 나가지 않게 크롭
위치를 손으로 맞추는 일이 제일 귀찮다. 로고 워터마크까지 매번 다시 얹으면
같은 영상 하나로 30분이 그냥 간다. 폼핏은 그 반복 작업을 스크립트 세 개로
줄인다. 피사체를 자동으로 따라가며 잘라내고, 로고·타이틀·인트로/아웃트로까지
한 파이프라인에서 입힌다. 실측 기준 8초짜리 원본 하나를 analyze·reframe·brand
세 단계로 처리하는 데 6초가 채 걸리지 않았다.
실존 인물을 사칭하거나 딥페이크·기만 목적으로 쓰는 용도로는 제공하지 않습니다.
파이프라인
- analyze: 얼굴 검출(Haar cascade) 우선, 없으면 움직임 기반으로
전환해 피사체 중심을 추적하고 흔들림을 줄인 뒤crop_path.json으로 저장. - reframe: 그 경로를 따라 목표 화면비로 크롭(
crop모드)하거나,
크롭하면 정보를 잃는 장면은 원본을 그대로 담고 여백을 블러로 채우는blur모드로 대체. - brand: 로고(코너·투명도·여백 지정), 상단/하단 타이틀 바(한글
지원, Pillow 렌더링), 인트로/아웃트로 카드 이미지를 입혀 최종 출력.
실제 명령
uv run scripts/analyze.py --input in.mp4 --output crop_path.json
uv run scripts/reframe.py --input in.mp4 --crop-path crop_path.json \
--preset shorts --mode crop --out out/9x16.mp4
uv run scripts/brand.py --input out/9x16.mp4 --out out/9x16_branded.mp4 \
--logo logo.png --logo-corner br --logo-opacity 0.85 \
--title "채널 이름" --intro intro.png --outro outro.png
포함 구성
| 구성 | 내용 |
|---|---|
scripts/analyze.py |
얼굴/움직임 기반 피사체 추적 → crop_path.json |
scripts/reframe.py |
4개 플랫폼 프리셋 × crop/blur 2모드 리프레임 |
scripts/brand.py |
로고·타이틀 바·인트로/아웃트로 브랜딩 |
guides/platforms.md |
쇼츠·릴스·틱톡·인스타 피드·유튜브 해상도/fps/길이 기준 |
guides/recipes.md |
배치 처리·문제 해결(FAQ) |
프리셋: shorts(9:16, 1080x1920) · feed-square(1:1, 1080x1080) ·feed-portrait(4:5, 1080x1350) · youtube(16:9, 1920x1080). 전부
H.264 + AAC, +faststart 로 출력.
사용 예시 3개
1) 유튜브 롱폼 → 쇼츠 클립
가로로 찍은 인터뷰/브이로그에서 한 구간을 잘라 쇼츠용으로 세로 변환.
얼굴을 우선 추적하므로 말하는 사람이 화면 중앙에 유지된다.
uv run scripts/analyze.py --input interview.mp4 --output cp.json
uv run scripts/reframe.py --input interview.mp4 --crop-path cp.json \
--preset shorts --mode crop --out shorts.mp4
uv run scripts/brand.py --input shorts.mp4 --out shorts_final.mp4 \
--logo logo.png --title "이번 주 하이라이트"
2) 강의/발표 화면 → 인스타 피드 4:5
슬라이드 전체가 중요한 콘텐츠는 크롭하면 글자가 잘린다. blur 모드로
원본 전체를 담고 여백만 블러로 채운다(트래킹 불필요, analyze 생략 가능).
uv run scripts/reframe.py --input lecture.mp4 --preset feed-portrait \
--mode blur --out feed_4x5.mp4
3) 브랜드 로고 + 인트로/아웃트로 일괄 적용
이미 리프레임된 여러 영상에 같은 로고·인트로 카드를 한 번에 씌워 톤을
맞춘다.
for f in clip1.mp4 clip2.mp4 clip3.mp4; do
uv run scripts/brand.py --input "$f" --out "branded_$f" \
--logo logo.png --logo-corner br --intro intro.png --outro outro.png
done
필요한 준비물
과장 없이 딱 이만큼만 있으면 된다.
uv,ffmpeg/ffprobe(PATH에 있어야 함). API 키 불필요.- 로고를 쓰려면 투명 배경 PNG 권장(불투명 배경도 되지만 워터마크 느낌이
덜 남). - 한글 타이틀을 쓰려면 OS에 한글 폰트가 있어야 한다(macOS/Windows는
기본 내장, 일부 Linux 최소 설치 환경은 Noto Sans CJK 를 따로 설치하거나--font로 경로를 지정해야 함). - 자동 자막·음악 삽입은 포함되지 않는다: 리프레임과 브랜딩까지만 한다.
추천 · 비추천
추천
- 가로로 찍은 원본 하나로 여러 플랫폼용 세로/정사각 클립을 뽑아야 하는
경우 - 인물/제품처럼 화면상 위치가 뚜렷한 피사체가 있는 콘텐츠
- 같은 로고·인트로를 여러 영상에 반복 적용해야 하는 경우
비추천
- 화면 전체(다중 인물, 그래프, 자막)가 골고루 중요해서 애초에 크롭 자체가
부적절한 콘텐츠라면blur모드만 쓰게 되어 이 스킬의 트래킹 기능은
체감이 적다 - 자동 자막이 필요하다면 이 스킬만으로는 부족하다(별도 STT 스킬 필요)
- 화면을 1초 이내에 가로지르는 극단적으로 빠른 피사체는 구간 경계에서
순간적으로 살짝 걸릴 수 있다(--chunk-sec축소로 완화, 상세는 FAQ)
FAQ
Q1. 실사 인물 얼굴 인식도 실제로 되나?
얼굴 검출은 OpenCV 표준 Haar cascade(정면 얼굴)를 쓴다. 다만 이 카드의
검증 영상은 정책상 실제 인물을 쓸 수 없어 합성 도형으로 테스트했고, 그
경우 얼굴이 없으므로 자동으로 움직임 기반 추적으로 전환되는 경로까지만
실측했다. 얼굴 검출 자체는 검증된 표준 알고리즘이지만 "실사 인물로 직접
검증했다"고는 말하지 않는다, 측면 얼굴, 저조도, 마스크 착용 시 놓칠 수
있고 그럴 때도 움직임 추적으로 자연스럽게 넘어간다.
Q2. 출력 영상 길이가 원본이랑 정확히 똑같나?crop 모드는 구간을 나눠 인코딩한 뒤 이어붙이는 방식이라 원본과 출력
프레임레이트가 다르면(예: 25fps→30fps) 반올림 오차가 누적된다. 실측
기준 8초 원본에서 약 0.26초(+3.2%) 길어졌다. 음성이 밀리거나 구간 내부가
어긋나는 문제는 아니다.
Q3. crop과 blur 중 뭘 써야 하나?
피사체가 한 곳에 몰려 있으면 crop, 화면 전체 정보가 다 중요하면 blur.
SKILL.md 와 guides/recipes.md 에 판단 기준과 예시를 정리해뒀다.
Q4. drawtext 필터를 안 쓰는 이유는?
Homebrew 기본 ffmpeg 빌드엔 drawtext/subtitles(libass·freetype) 필터가
없는 경우가 흔하다(실측 확인). 그래서 글자·로고는 Pillow 로 투명 PNG를
그려 overlay 필터로 입힌다, 이 스킬을 받는 쪽 환경에서도 별도 ffmpeg
빌드 없이 그대로 동작한다.
Q5. 여러 영상을 한 번에 배치 처리할 수 있나?
스킬 자체에 배치 러너는 없다. 대신 쉘 반복문으로 세 스크립트를 감싸는
레시피를 guides/recipes.md 에 그대로 실어뒀다, 복사해서 쓰면 된다.
구매 안내
다운로드 1회 구매, 압축파일 안의 SKILL.md 안내를 따라 uv 로 바로
실행하면 된다. 실행에 계정 가입이나 API 키가 필요 없다. Capafy에서
'폼핏'으로 검색하면 바로 찾을 수 있다.
예시 이미지는 Blender Foundation 의 오픈 무비 Big Buck Bunny(CC BY 3.0, bigbuckbunny.org) 예고편으로 실제로 돌린 결과입니다.