Premiere Ffmpeg Render
ASecurity영상 편집을 프리미어 없이 FFmpeg로 하는 스킬. (A) 프리미어 프로(.prproj) 프로젝트를 분석해 컷 목록·효과(위치/크기, 자르기, 울트라 키 크로마키, 마스크 모자이크, 화면 정지, 트랙 음소거)를 뽑고 같은 영상을 다시 렌더링한 뒤 원본 내보내기와 화질(PSNR)·소리 싱크를 비교 검증한다. (B) 프로젝트 없이 원본 녹화(화면녹화+그린스크린 카메라)만으로 처음부터 편집한다 — 음성 인식으로 대본을 만들어 다시 말한 부분·끊긴 문장·군소리·긴 침묵을 자르고, 카메라를 키잉해 얹고, 화면 속 개인정보를 모자이크하고, 결과를 다시 받아써서 검증한다. 사용자가 "프리미어 프로젝트 분석해줘", "prproj 읽어줘", "이 편집 그대로 다시 만들어줘", "프리미어 없이 렌더링", "편집 재현", "컷 목록 뽑아줘", "원본만 가지고 편집해줘", "이 녹화본 편집해줘", "말 반복한 거 잘라줘", "NG 잘라줘", "컷 편집", "설명 영상 만들어줘", "그린스크린 합성...
- 5 stars
- 0 votes
- 0 copies
- 0 views
- Added November 7, 2026
Security analysis
100/100Pro scans all 16 files and shows the line behind each finding
npx -y skills add Wanfeng1028/muse --skill premiere-ffmpeg-render --agent claude-codeAre you the author of Premiere Ffmpeg Render?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/wanfeng1028-premiere-ffmpeg-render)---
name: premiere-ffmpeg-render
description: 영상 편집을 프리미어 없이 FFmpeg로 하는 스킬. (A) 프리미어 프로(.prproj) 프로젝트를 분석해 컷 목록·효과(위치/크기, 자르기, 울트라 키 크로마키, 마스크 모자이크, 화면 정지, 트랙 음소거)를 뽑고 같은 영상을 다시 렌더링한 뒤 원본 내보내기와 화질(PSNR)·소리 싱크를 비교 검증한다. (B) 프로젝트 없이 원본 녹화(화면녹화+그린스크린 카메라)만으로 처음부터 편집한다 — 음성 인식으로 대본을 만들어 다시 말한 부분·끊긴 문장·군소리·긴 침묵을 자르고, 카메라를 키잉해 얹고, 화면 속 개인정보를 모자이크하고, 결과를 다시 받아써서 검증한다. 사용자가 "프리미어 프로젝트 분석해줘", "prproj 읽어줘", "이 편집 그대로 다시 만들어줘", "프리미어 없이 렌더링", "편집 재현", "컷 목록 뽑아줘", "원본만 가지고 편집해줘", "이 녹화본 편집해줘", "말 반복한 거 잘라줘", "NG 잘라줘", "컷 편집", "설명 영상 만들어줘", "그린스크린 합성해줘", "개인정보 모자이크해줘"처럼 말하거나, 폴더에 .prproj나 OBS 화면녹화+카메라 원본이 있고 그걸 편집하려 할 때는 스킬을 명시하지 않아도 반드시 이 스킬을 사용할 것. Premiere project → FFmpeg re-render, and edit-from-raw-footage with transcript-driven cuts.
---
# 프리미어 없이 FFmpeg로 편집하기
두 가지 작업이 있다. 사용자가 `.prproj`를 다루려 하면 **A**, 원본 녹화만으로 편집을 원하면 **B**(아래 "B. 원본으로
처음부터 편집")를 따른다. 둘 다 같은 렌더러(`render.py`)와 검증 도구(`verify.py`)를 쓴다.
## 작업 폴더 (A·B 공통)
작업 파일(timeline.json, 대본, decisions.json, 마스크, 구간 영상 segs/, wav)은 **영상 폴더 안의 `_편집작업/`**에
만든다 — 아래 명령의 `<work>`가 이 폴더다(예: `D:/영상/20260816/_편집작업`). 임시 폴더(scratchpad)에 두지 않는다.
이유: 사용자는 며칠 뒤 "12분쯤 여기만 고쳐줘"처럼 부분 수정을 요청한다. 작업 파일이 영상 옆에 있으면 결정 파일만 고치고
다시 렌더링하면 되고(바뀐 구간만 다시 만든다), 폴더째 다른 컴퓨터로 옮겨도 이어서 작업할 수 있다. 임시 폴더에 있으면
세션이 끝나거나 정리될 때 사라져서 음성 인식부터 다시 해야 한다.
- 이미 `_편집작업/`이 있으면 새로 만들지 말고 그 안의 파일을 읽어 이어서 작업한다(이전 결정·대본 재사용).
- 같은 영상 폴더에서 여러 편집을 하면 `_편집작업/<편집이름>/`으로 나눈다(예: `_편집작업/재현`, `_편집작업/새편집`).
- 구간 영상(segs/)이 수 GB가 될 수 있다. 작업이 끝나면 크기를 알려 주고, 더 고칠 일이 없으면 `segs/`와 `wav/`는
지워도 된다고 안내한다(결정 파일과 대본만 남겨도 부분 수정은 가능하다 — 다시 렌더링만 하면 된다).
- 부분 수정 요청: 해당 `decisions.json`(B) 또는 `timeline.json`(A)만 고치고 같은 명령을 다시 실행한다. render.py는
구간을 내용 기준으로 캐시하므로 바뀐 구간만 다시 렌더링하고 안 쓰는 구간 파일은 지운다.
## A. 프리미어 프로젝트 → FFmpeg 재현 렌더링
프리미어 `.prproj`는 gzip으로 압축된 XML이다. 여기서 시퀀스의 클립 배치와 효과 값을 읽어
FFmpeg 명령으로 바꾸면, 프리미어 없이도 같은 결과물을 만들 수 있다. 원본 내보내기 파일이 있으면
프레임/소리 단위로 비교해서 "정말 같은지"를 숫자로 보여줄 수 있다. 사용자가 이 스킬을 쓰는 이유는
대개 (1) 편집 내용을 이해하려고, (2) 프리미어 없이 다시 뽑거나 고쳐서 뽑으려고, (3) Claude의
편집 능력을 확인하려고다. 셋 다 같은 파이프라인으로 처리된다.
### A 준비물
- `ffmpeg`, `ffprobe` (PATH에 있어야 함), Python 3 + `numpy`, `Pillow`
- 프로젝트가 참조하는 원본 미디어. 프로젝트에 저장된 경로(예: 다른 드라이브)에 없으면
`.prproj`와 같은 폴더에서 파일 이름으로 찾는다 — 보통 폴더째 옮긴 경우라 이걸로 해결된다.
- `Adobe Premiere Pro Auto-Save` 폴더의 파일은 자동저장본이다. 사용자가 따로 말하지 않으면
폴더 최상위의 `.prproj`(가장 최근 저장본)를 쓴다.
결과물은 원본 완성본을 덮어쓰지 않도록 `Claude재현_<원본이름>.mp4`처럼 구분되는 이름으로 저장한다.
작업 파일은 위 "작업 폴더" 규칙대로 `<영상폴더>/_편집작업/`에 둔다.
### A 순서
스크립트는 이 스킬의 `scripts/` 폴더에 있다. (아래 `$S` = 그 경로)
#### 1. 프로젝트 분석
```bash
python "$S/extract.py" "<프로젝트>.prproj" <work>/timeline.json [--sequence 이름]
```
시퀀스 해상도·프레임레이트·길이, 트랙별 클립 수·효과·사용 파일, 그리고 **WARNING** 목록이 출력된다.
WARNING은 렌더러가 재현하지 못하는 요소(전환 효과, 속도 변경, 회전, 불투명도 키프레임, 지원 안 되는
효과 등)이다. 이걸 사용자에게 꼭 알린다 — 재현본이 원본과 다를 수 있는 이유가 바로 이것이기 때문이다.
결과를 사람이 읽기 좋게 요약해 준다: 화면 구성(어떤 트랙이 배경이고 무엇을 위에 얹었는지),
컷 수와 전체 길이, 효과가 쓰인 곳(모자이크 시각, 화면 정지 위치), 음소거된 트랙.
클립 상세(타임라인 위치 ↔ 원본 구간)가 필요하면 `timeline.json`을 읽으면 된다 — 시간 단위는
Premiere tick(초당 254016000000)이다.
#### 2. 짧은 구간으로 먼저 테스트
전체 렌더링은 24분 영상 기준 20~30분 걸린다. 그 전에 대표 구간 몇 곳만 렌더링해서 원본과 비교한다.
특히 크로마키 값은 촬영 환경마다 달라서 여기서 맞춰야 한다.
```bash
python "$S/render.py" <work>/timeline.json "<미디어폴더>" <work>/segs out.mp4 --frames 3000:3010
```
`--frames A:B`는 그 프레임 범위와 겹치는 구간(segment)만 렌더링하고 끝난다. 일반 장면, 모자이크가
있는 곳, 타이틀 이미지, 화면 정지 구간을 하나씩 골라 테스트하면 된다. 끝날 때 각 구간의 파일 이름
(`seg_<내용해시>.mp4`)과 프레임 범위를 출력한다. 원본과의 비교:
```bash
ffmpeg -i <work>/segs/seg_<해시>.mp4 -ss <구간시작프레임/fps> -i "<원본완성본>.mp4" \
-lavfi "[0:v]setpts=PTS-STARTPTS[a];[1:v]setpts=PTS-STARTPTS[b];[a][b]psnr" -frames:v 90 -f null -
```
40dB 이상이면 눈으로 구분하기 어려운 수준이다. 숫자와 함께 한 프레임을 나란히 붙인 이미지를 직접 보고
(카메라 위치, 키잉 가장자리, 모자이크 색) 판단한다. 키잉이 사람까지 지우거나 초록 테두리가 남으면
`--key-threshold`(기본 42, 낮추면 덜 지움) / `--key-softness`(기본 24) / `--despill`(기본 6)을
조정한다. 키 값이 바뀌면 구간 이름도 바뀌므로 그냥 다시 실행하면 해당 구간이 새로 렌더링된다.
#### 3. 전체 렌더링 (백그라운드)
```bash
python "$S/render.py" <work>/timeline.json "<미디어폴더>" <work>/segs "<출력>.mp4" --jobs 6 > render.log 2>&1
```
오래 걸리므로 `run_in_background`로 돌리고, 끝나면 알림을 받아 진행한다. 중간에 실패해도 완료된
구간은 캐시돼 있으니 같은 명령을 다시 실행하면 이어서 한다. `--jobs`는 CPU 코어 수의 절반 정도가 적당하다.
#### 4. 원본과 검증
```bash
python "$S/verify.py" "<출력>.mp4" "<원본완성본>.mp4" <work>
```
프레임 수, 0.5초 간격 PSNR(평균/중앙값/40dB 이상 비율/30dB 미만 시각), 소리 상관계수와 싱크
어긋남(ms)을 출력한다. PSNR이 낮은 시각이 나오면 그 프레임을 나란히 뽑아 보고 원인을 설명한다.
#### 5. 보고
사용자에게는 표로 정리해 준다: 길이(프레임 수), 화질 유사도, 소리 일치도·싱크. 그리고
**원본과 다른 점을 솔직하게** 적는다 — 크로마키는 울트라 키의 근사치라는 점, extract의 WARNING
항목들, 끝 프레임 수 차이 등. 비교 이미지(재현본/원본 나란히)를 만들어 보여주면 이해가 빠르다.
한글 라벨이 필요하면 ffmpeg drawtext(폰트 설정 문제로 Windows에서 실패하기 쉬움) 대신 Pillow로
`C:/Windows/Fonts/malgun.ttf`를 써서 그린다.
## 렌더러(render.py)가 재현하는 것 / 못 하는 것
재현: 모든 비디오 트랙을 아래(V1)부터 합성, 컷(프레임 단위), 모션(위치·크기·기준점), 자르기,
울트라 키(초록/파랑 화면 우세도 기반 근사 키 + 번짐 억제), 맨 아래 트랙의 마스크 모자이크(마스크
키프레임 보간 포함), 정지 이미지, 1프레임 클립 반복으로 만든 화면 정지, 트랙 음소거, 오디오 합산(샘플 단위).
못 함(extract가 WARNING으로 알려줌): 전환 효과, 속도 변경, 회전, 불투명도/페이드, 모션 키프레임,
클립·트랙 볼륨 조정, 텍스트/그래픽, Lumetri 등 그 외 효과. 이런 게 있으면 결과가 원본과 달라지므로
렌더링 전에 사용자에게 알리고, 필요하면 해당 기능을 render.py에 추가한다.
포맷 세부(XML 구조, 마스크 바이너리, 키 색상 인코딩)와 이 파이프라인을 만들며 겪은 함정들은
`references/notes.md`에 있다. 새 효과를 지원하도록 스크립트를 고치거나, 추출 결과가 이상할 때 읽는다.
---
## B. 원본으로 처음부터 편집
화면 녹화와 그린스크린 카메라를 동시에 찍은 설명 영상이 대상이다. 핵심은 **대본을 읽고 사람 편집자처럼 판단하는
것**이고, 스크립트는 그 판단을 정확한 컷으로 옮기는 도구다. 판단 규칙과 함정은 `references/editing_from_raw.md`에
있고, 이 사용자의 기본 편집 습관은 `references/editing_profile.md`에 있다. **편집 결정을 내리기 전에 둘 다 읽는다.** 사용자가 "앞으로는 이렇게 해줘"라고 하면 editing_profile.md에 적는다. `references/example_decisions.json`은 실제로 했던 결정의 예시다.
준비물: ffmpeg(whisper 필터 포함 빌드 — `ffmpeg -filters | grep whisper`로 확인), whisper.cpp ggml 모델
(`~/.cache/whisper/ggml-large-v3-turbo-q5_0.bin`, 없으면 사용자 허락을 받고 Hugging Face ggerganov/whisper.cpp에서 받는다).
1. **준비**: 짝 맞추기·싱크·말 덩어리·덩어리별 음성 인식 (43분 분량 기준 약 10분, 백그라운드로)
```bash
python "$S/scratch_prep.py" "<미디어폴더>" <work> --model ~/.cache/whisper/ggml-large-v3-turbo-q5_0.bin
```
짝이 자동으로 안 맞으면 `--pair 카메라.mp4=화면.mp4`를 반복해서 준다. 싱크 상관(corr)이 0.95 미만이면 의심한다.
2. **대본 읽고 결정**: `<work>/ut_<파일>.txt`를 처음부터 끝까지 읽는다. 파일 경계를 넘는 다시 찍기(앞 파일 끝 시연이
꼬여서 다음 파일에서 다시 함)도 찾는다. 결정을 `decisions.json`으로 쓴다. 쓸 수 있는 항목(형식은 각 스크립트 맨 위 설명):
- `files` 또는 `sequence`(재생 순서 지정) — 덩어리별 `keep`, `trim`(`start`/`end`/`cut` 문장 중간 빼기)
- `intro` / `outro` — 처음·끝 N초 배경을 표지 이미지로 (카메라·목소리는 그대로)
- `title.ranges` — 특정 말 동안 이미지 배경 (예: URL 말할 때 URL 이미지)
- `broll` — 그 말 동안 따로 찍은 녹화(핸드폰 화면 등)를 배경으로, `speed`(빠르게)·`scale` 가능
폴더(하위 폴더 포함)에서 표지·슬라이드 이미지와 핸드폰 녹화를 먼저 찾아서 쓸 곳을 정한다.
3. **조립 + 다시 받아쓰기로 확인**:
```bash
python "$S/scratch_edl.py" <work> decisions.json --check --model <모델>
```
이어 붙인 결과를 시청자처럼 읽고, 남은 반복·끊긴 말을 고쳐 다시 돌린다(`--window 시작:길이`로 부분 확인).
이 루프를 건너뛰면 반복이 꼭 몇 군데 남는다.
4. **개인정보**: `privacy_review.py`로 장면 모음을 만들어 **전부 직접 본다.** 가릴 곳을 spec으로 써서
`privacy_masks.py`로 마스크를 만든다(고정 칸은 rect, 스크롤 문서는 detector — `references/privacy_detector_example.py`).
5. **타임라인 + 렌더링**:
```bash
python "$S/scratch_timeline.py" <work> "<미디어폴더>" --decisions decisions.json --mosaic masks.json # 카메라 위쪽 자르기는 머리 위치를 보고 자동(--crop auto)
python "$S/render.py" <work>/timeline.json "<미디어폴더>" <work>/segs "<출력>.mp4" --frames A:B # 먼저 몇 구간
python "$S/render.py" <work>/timeline.json "<미디어폴더>" <work>/segs "<출력>.mp4" --jobs 6 # 백그라운드
```
모자이크 구간과 카메라 좌우 전환 구간은 테스트 렌더로 프레임을 뽑아 직접 확인한다.
6. **보고**: 길이·클립 수, 무엇을 왜 잘랐는지(대표 예시), 판단이 갈릴 수 있는 곳(발음만 다른 두 시도 등)의 시각,
가린 개인정보와 **가리지 않고 남긴 정보 목록**(사용자 판단 필요), 남은 한계를 적는다. 사용자가 직접 한 편집이
있으면 `edl.json`의 카메라 구간과 비교해 공통 비율과 차이를 보여준다.
Files in this skill
- LICENSE
- README.md
- SKILL.md
- references/editing_from_raw.md
- references/editing_profile.md
- references/example_decisions.json
- references/notes.md
- references/privacy_detector_example.py
- scripts/extract.py
- scripts/privacy_masks.py
- scripts/privacy_review.py
- scripts/render.py
- scripts/scratch_edl.py
- scripts/scratch_prep.py
- scripts/scratch_timeline.py
- scripts/verify.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.