Communitygithub.com

키네틱 필름 → DaVinci Resolve 변환

scenario-kinetic-film 스킬로 제작된 키네틱 타이포그래피 필름(폴더와 spec.js)을 편집 가능한 DaVinci Resolve 타임라인으로 변환합니다. 각 샷마다 실제 Fusion 컴포지션이 생성되며, 동일한 비트 그리드 위에 배치됩니다.

키네틱 필름 → DaVinci Resolve 변환란 무엇인가요?

이 스킬은 `scenario-kinetic-film` 스킬로 만든 키네틱 필름 폴더(특히 `spec.js` 파일)를 DaVinci Resolve 프로젝트의 편집 가능한 타임라인으로 변환합니다. 각 샷은 고유한 Fusion 컴포지션(Text+, Text3D, 키프레임이 적용된 카메라)을 가진 하나의 클립이 되며, 원본 필름의 비트 타이밍을 그대로 유지합니다. 에디터는 Fusion 페이지에서 각 샷을 열어 단어 수정, 트리밍, 배경 음악 교체 등을 자유롭게 할 수 있습니다. 이는 Resolve 자체 도구를 사용한 재구축이므로 픽셀 단위의 완벽 일치는 아닙니다. 지원 플랫폼은 DaVinci Resolve Studio(실행 중인 프로젝트 필요)이며, `setup()` 함수가 반환하는 `notes` 리스트를 통해 원본과의 차이점을 사용자에게 보고합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MusicProWorkshop/davinci-resolve-skills/tree/HEAD/plugins/davinci-resolve-timelines/skills/kinetic-film-to-resolve

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

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

문서

키네틱 필름 → DaVinci Resolve 변환은(는) 무엇을 하나요?

키네틱 필름의 spec.js를 Resolve 타임라인으로 변환합니다. 모든 샷은 고유한 Fusion 컴포지션(실제 Text+ 및 Text3D, 키프레임 카메라, 동일한 비트 타이밍)을 가진 하나의 클립이 됩니다. 에디터는 Fusion 페이지에서 샷을 열어 단어를 다시 입력하거나, 트리밍하거나, 음악을 교체할 수 있습니다.

이는 Resolve 도구로 재구축하는 것이며 픽셀 일치가 아닙니다. 원본과 변경된 사항이 있다면 (setup이 notes 리스트로 반환) 사용자에게 보고하십시오.

시작하기 전에

  • Resolve Studio가 실행 중이고 프로젝트가 열려 있어야 합니다. get_resolve_status로 확인하고, Resolve 서버가 요청하므로 get_whats_new를 한 번 호출하십시오.
  • 필름 폴더에 spec.js와 엔진 파일이 있어야 하며, npm install playwright가 실행되어 있어야 합니다.
  • Resolve 외부에서 타입 측정을 위한 Pillow가 설치된 Python. PATH에 ffmpeg.

사용자에게 물어볼 사항

빌드 전에 다음 사항을 결정하십시오. 대화 내용에서 파악할 수 있으면 그렇게 하십시오.

  1. 어느 프로젝트. 타임라인이 열려 있는 프로젝트에 추가됩니다. 사용자에게 어떤 프로젝트인지 알려주십시오. 프로젝트를 전환하면 저장되지 않은 작업이 손실될 수 있으므로, 잘못된 프로젝트라면 사용자에게 전환을 요청하십시오.
  2. 타임라인 이름. 기본값 <title> (Fusion). 기존 타임라인을 확인하고 사용 가능한 이름을 선택하십시오. 이 세션에서 직접 생성하지 않은 타임라인을 재사용하거나 교체하지 마십시오.
  3. 폰트. Text+는 설치된 폰트만 볼 수 있으며, 필름의 기본 폰트(Archivo)는 보통 설치되어 있지 않습니다. 프로젝트에 브랜드 폰트가 있으면 그것을 사용하십시오. fonts_available(resolve, 'Lato', 'Inter')로 확인하고, 사용자 동의 없이 폰트를 설치하지 마십시오. 두꺼운 굵기(Black, Heavy, ExtraBold)가 가장 잘 읽힙니다.
  4. 오디오. 기존 타임라인의 음악 편집본(audio_from_timeline), 파일(audio_from_file), 또는 없음. 이미 해당 필름이 음악과 함께 있는 타임라인이 있다면 그것을 먼저 제안하십시오. 사용자의 편집 내용을 유지할 수 있습니다.

단계

아래에서 SKILL은 이 스킬의 폴더이고 F는 필름 폴더입니다. 각 Resolve 단계는 run_script_unsafe를 통해 실행되며, 호출당 60초로 제한됩니다. 다음과 같이 시작합니다:

SKILL = r'<이 스킬 폴더>'; F = r'<필름 폴더>'
exec(open(SKILL + r'\scripts\resolve_build.py', encoding='utf-8').read())

1. spec 내보내기 (셸에서):

node "<SKILL>/scripts/export_film.mjs" "<F>"

<F>/resolve/film.json과 로고를 투명 PNG로 쓰고, 찾은 블록을 출력합니다.

2. 타임라인 생성:

result = setup(resolve, project, F, 'My Film (Fusion)', 'Lato', 'Black', 'Inter', 'Medium')

마지막 두 폰트는 작은 줄과 모의 UI용입니다. 타임라인, Kinetic Films / <title> 빈, 검은색 플레이스홀더 클립을 만들고 샷 수와 notes를 반환합니다. 타임라인 크기와 프레임 속도는 프로젝트에서 가져오므로, 60fps로 만든 필름이 30fps 타임라인에 배치될 수 있습니다. 1920x1080, 60fps에서만 검증되었으므로 다른 포맷은 주의 깊게 확인하십시오.

3. 타입 측정 (Pillow가 설치된 Python을 사용하여 셸에서):

python "<SKILL>/scripts/measure_fonts.py" "<F>" Lato Black

이 단계를 생략하면 단어가 추정된 너비를 사용하여 프레임을 제대로 채우지 못할 수 있습니다. 폰트 파일이 없다고 보고하면 계속 진행하되 프레이밍을 면밀히 확인하십시오.

4. 빌드. done이 true가 될 때까지 반복합니다. 중단된 지점에서 재개됩니다:

result = build_batch(project, F, 40)

그런 다음 HUD(필름에 있는 경우에만), 오디오 및 씬 마커를 추가합니다:

result = dict(hud=add_hud(project, F), audio=audio_from_timeline(project, F, 'Music Edit'), markers=add_markers(project, F))

HUD는 전체 필름 위의 트랙 2에 있는 하나의 Fusion 클립입니다. 에디터가 해당 클립을 비활성화하여 제거할 수 있습니다.

5. 프레임 확인. Resolve 21.2 이상에서는 렌더링 없이 렌더 설정 변경 없이 타임라인에서 각 샷의 중간 프레임에 레이블이 지정된 시트를 몇 초 만에 내보냅니다. 결과는 <F>/resolve/review/에 저장됩니다. 검은 화면이 없는지, 단어가 프레임 안에 있는지, 키커가 단어를 제대로 처리하는지, 이미지가 프레임을 덮고 있는지 확인하십시오. 렌더링 전에 문제를 수정하십시오. frame_grid(project, F, seconds=[4.2, 9.35])는 전체 크기의 특정 순간(예: 휩 종료 지점)을 제공합니다.

result = frame_grid(project, F)

프레임은 동일한 프레임의 렌더링과 일치하며 21.2에서 확인되었습니다. ExportThumbnails가 없는 구형 Resolve에서는 오류가 발생하므로 렌더링을 통해 판단하십시오.

6. 렌더링 및 모션 측정.

result = start_render(project, F, 'my_film')    # 가능한 경우 GPU H.264 인코더 선택
# 이후 호출: result = wait_render(project, result_job_id, 50)

강력한 GPU에서 1080p60, 30초 기준 약 2~4분이 소요됩니다. 완료 후 remove_job으로 자신의 작업만 제거하십시오. 큐에 사용자의 작업이 있을 수 있습니다. start_render는 프로젝트의 렌더 설정을 변경하므로 사용자에게 알리십시오.

모션은 비디오에서만 측정할 수 있습니다. 설치되어 있다면 scenario-kinetic-film 스크립트의 holds.py와 dyn.py를 렌더링 결과에 대해 실행하십시오. 목표는 정지 프레임 40% 이하, 종료 카드 전 0.6초 이상의 홀드 없음, 중간 모션 2.5 이상입니다. 숫자와 놓친 부분을 보고하십시오.

무언가를 변경하려면 수정하고 setup(..., replace=True)로 재빌드하십시오. 이 스킬이 생성한 타임라인에만 해당됩니다. 그런 다음 4~6단계를 반복하십시오. 일부 샷만 수정하려면 rebuild_shots(project, F, [8.2, 13])가 해당 시간(초) 또는 샷 인덱스의 컴포지션만 교체하고 나머지는 유지합니다. 필름의 단어가 변경된 경우 3단계를 다시 실행하십시오.

7. 마무리. 사용자가 요청하지 않는 한 저장은 사용자에게 맡기십시오. 저장은 다른 편집 내용도 커밋할 수 있습니다. 타임라인 이름, 노트, 렌더링 시간 및 리뷰 수치를 보고하십시오. 플레이스홀더 클립이 빈에 남아 있어야 하며, 그렇지 않으면 샷이 오프라인으로 표시될 수 있음을 언급하십시오.

하지 말아야 할 것과 그 이유

다음 각 항목은 찾는 데 실제 시간이 소요됩니다. 자세한 내용은 references/fusion-traps.md에 있습니다. fusion_lib.py를 변경하기 전이나 문제가 발생하면 읽어보십시오.

  • 컴포지션을 빌드하는 동안 잠그지 마십시오. 클립이 검은색으로 렌더링됩니다. Shot.loader에서처럼 Loader 생성 시에만 잠그십시오. 그렇지 않으면 Loader의 클립을 설정할 때 사용자 화면에 모달 파일 선택기가 열려 모든 스크립팅이 중단됩니다.
  • 리뷰에 ExportCurrentFrameAsStill을 사용하지 마십시오. Fusion보다 빠르게 실행되어 검은색 또는 오래된 프레임을 반환합니다. Timeline.ExportFrame과 ExportThumbnails를 사용하는 frame_grid가 안정적이지만, 열리지 않은 타임라인에서는 성공을 보고하면서도 검은 프레임을 내보냅니다.
  • 모션 블러를 중첩하지 마십시오. 단어 자체 이동과 카메라 이동 모두에 블러를 적용하면 작업량이 배가됩니다. 카메라에만 블러를 적용하고 빠른 이동 중에만 적용하십시오.
  • 더 빠른 인코더가 느린 렌더링을 해결한다고 가정하지 마십시오. 일반적으로 Fusion 프레임 생성이 병목입니다. 설정을 변경하기 전에 측정하십시오.

참고 자료

  • references/block-map.md: 14개 블록 각각이 어떻게 변환되고 무엇이 근사되는지 설명합니다. Graph, Counters, Progress, Chain, Prompt, Notes 또는 Rewind를 사용하는 필름이 있거나 사용자가 샷의 정확도를 묻는 경우 읽어보십시오.
  • references/fusion-traps.md: 어렵게 알아낸 API 동작 방식과 Resolve 복구 방법.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬