Communitygithub.com

MusicProWorkshop/resolve-screen-tutorial

스크린샷과 설명을 바탕으로 편집 가능한 DaVinci Resolve 타임라인을 빌드하여 소프트웨어 튜토리얼, 제품 워크스루 또는 화면 데모를 제작합니다. 카메라 이동은 실제 Inspector 키프레임, 움직이는 커서, 클릭 효과, 요소 하이라이트, 역할 또는 단계 레이블이 있는 캡션 바, 브랜드 타이틀과 엔드 카드로 구성됩니다.

resolve-screen-tutorial란 무엇인가요?

이 스킬은 소프트웨어 튜토리얼, 제품 워크스루 또는 화면 데모를 DaVinci Resolve 편집자가 계속 작업할 수 있는 타임라인으로 자동 변환합니다. 사용자가 제공한 설명(`film.json`)과 스크린샷을 기반으로, 일반 Inspector 키프레임이 있는 클립, Inspector에서 제어 가능한 Fusion 타이틀, 씬 마커, 움직이는 커서, 클릭 효과, 요소 하이라이트, 역할 또는 단계 레이블이 있는 캡션 바로 구성된 타임라인을 생성합니다. 오디오는 추가되지 않으므로 내레이션과 배경 음악은 이후에 추가할 수 있습니다. 이 스킬은 Resolve API가 키프레임이나 타이틀 길이를 직접 설정할 수 없는 한계를 우회하여 타임라인 파일을 작성하고 가져오는 방식으로 작동합니다. 지원 플랫폼은 DaVinci Resolve Studio 21.2 이상이며, `pillow`(Python), ffmpeg, 그리고 타임라인 형식은 1920x1080이어야 합니다. 주요 단계로는 프로젝트 확인(`preflight`), 타이틀 설치(`templates.py`), 타임라인 빌드(`build_film`), 리뷰 프레임 추출(`review_frames`), 렌더링이 포함됩니다.

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

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

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

문서

Resolve 타임라인에서 화면 튜토리얼 만들기

튜토리얼의 설명(film.json)과 스크린샷을 편집자가 계속 작업할 수 있는 타임라인으로 변환합니다. 클립에는 일반 Inspector 키프레임이 있으며, 타이틀은 Fusion 타이틀로 Inspector에서 제어할 수 있고, 씬이 표시됩니다. 오디오는 추가되지 않으므로 내레이션과 음악은 이후에 넣습니다.

Resolve API는 키프레임이나 타이틀 길이를 설정할 수 없으므로, 빌드 과정에서 타임라인 파일을 작성하여 가져옵니다. references/how-it-works.md에 이 과정과 알려진 문제점이 설명되어 있습니다. 단계가 실패하거나 Resolve가 21.2보다 최신 버전이면 이 문서를 읽어보세요.

시작하기 전에

  • Resolve Studio가 실행 중이고 프로젝트가 열려 있어야 합니다. get_resolve_status로 확인하고, Resolve 서버가 요청하므로 since를 21.0으로 설정하여 get_whats_new를 한 번 호출하세요.
  • Resolve 외부: Python과 pillow, 그리고 PATH에 ffmpeg가 필요합니다.
  • 프로젝트의 타임라인 형식은 1920x1080이어야 합니다. preflight에서 이를 확인합니다.

사용자와 결정하기

대화에서 가능한 한 확인하고, 누락된 부분에 대해서만 질문하세요:

  1. 프로젝트. 타임라인은 열려 있는 프로젝트에 추가됩니다. 사용자에게 프로젝트 이름을 알려주세요. 프로젝트를 전환하면 저장되지 않은 작업이 손실될 수 있으므로, 잘못된 프로젝트라면 사용자에게 직접 전환하도록 요청하세요.
  2. 스크린샷. 스크린샷은 사용자가 제공하거나 직접 캡처합니다. Playwright를 사용하는 경우 1920x1080 뷰포트와 deviceScaleFactor: 2를 사용하세요. 이미지는 3840x2160으로 출력되며, getBoundingClientRect는 film.json에 맞는 올바른 위치를 반환합니다. 제공된 각 이미지를 살펴보고, 대상 audience에 맞는 이미지를 사용하며, 생략한 이미지를 사용자에게 알려주세요.
  3. 브랜드. 색상, 폰트, 워드마크, 그리고 Host 또는 Admin과 같은 레이블을 확인하세요. 먼저 사용자의 코드나 이전 타이틀에서 찾아보세요. Text+는 설치된 폰트만 볼 수 있으며, 허락 없이 폰트를 설치하지 마세요.
  4. 타임라인 이름. 중복되지 않는 이름을 선택하세요. 자신이 만들지 않은 타임라인을 절대 교체하지 마세요.

film 작성하기

영화 폴더를 만들고 그 안에 film.json을 작성하세요. references/film-format.md에 형식이 설명되어 있습니다. 지금 읽어보세요.

읽기 좋은 몇 가지 타이밍:

  • 한 씬을 6~10초 동안 보여주고, 캡션은 두 번 읽을 수 있을 정도로 충분히 길게 유지하세요(8자당 약 1초).
  • 카메라는 약 1초 동안 이동시키고, 커서가 움직이거나 하이라이트가 표시되기 전에 안정화되도록 하세요.
  • 커서는 약 0.8초 동안 이동시키고, 착지 후 약 0.3초 후에 클릭하세요.
  • 클릭 결과를 보여주려면, 새 씬의 레이아웃이 현재 줌 수준에서 정렬된다면 클릭 직후 새 샷으로 전환하세요. 페이지가 완전히 바뀌면 클릭 직후 씬을 끝내고 디졸브로 다음 씬으로 넘어가세요.
  • 디졸브를 통해 커서를 고정하려면, x' = tx + x * zoom을 사용하여 다음 씬의 커서를 같은 프레임 위치에서 시작하세요.
  • 양쪽 끝에 약 3초씩 카드를 사용하세요.

캡션에는 스크린샷에 보이는 내용이나 사용자가 알려준 내용만 적어야 하며, 추론한 내용은 보고서에 포함하세요.

버튼을 놓치는 하이라이트가 이 형식에서 가장 눈에 띄는 실수이므로, 추정하지 말고 측정하세요. 이미지는 실제 크기와 다른 배율로 표시될 수 있으므로 이미지에서 직접 위치를 읽지 마세요:

python "<SKILL>/scripts/measure.py" grid shot.png grid.png

grid.png(프레임 좌표가 표시됨)를 열어 버튼 채우기의 대략적인 지점을 찾으세요. 그런 다음 정확한 사각형을 얻고 결과를 확인하세요:

python "<SKILL>/scripts/measure.py" at shot.png 1250 470
python "<SKILL>/scripts/measure.py" show shot.png check.png 1200,450,180,40

버튼의 테두리가 비슷한 색상에 가까우면 새어 나올 수 있으므로 경고를 읽고, 사각형이 너무 커 보이면 허용 오차를 낮추세요.

빌드하기

SKILL은 이 스킬의 폴더이고 WORK는 영화 폴더입니다. 셸 단계는 어디서든 실행됩니다. Resolve 단계는 run_script_unsafe를 통해 실행됩니다. 모든 호출에 timeout: 60을 전달하세요. 이 도구의 기본값은 10초이며 단계가 더 오래 걸릴 수 있기 때문입니다. 각 단계는 다음으로 시작합니다:

SKILL = r'<이 스킬 폴더>'; WORK = r'<영화 폴더>'
exec(open(SKILL + r'\scripts\resolve_steps.py', encoding='utf8').read())

film.json이 존재하기 전에 project_format(project)는 프로젝트의 크기, 프레임 속도 및 타임라인을 제공하고, fonts_available('Lato', ...)는 설치된 폰트와 스타일을 제공합니다. 특별한 이유가 없다면 fps를 프로젝트의 프레임 속도로 설정하세요.

1. 프로젝트 확인. 계속하기 전에 problems에 있는 항목을 수정하고, 사용자의 결정이 필요한 사항은 사용자에게 물어보고, notes는 전달하세요. 아무것도 변경하지 않습니다.

result = preflight(project, WORK)

2. 계획 및 타이틀 설치. 경고를 읽고 film.json에서 중요한 부분을 수정하세요. 이 단계는 브랜드에 맞게 Resolve의 템플릿 폴더에 타이틀을 설치하며, 동일한 이름의 기존 타이틀을 교체하므로 사용자에게 알려주세요.

python "<SKILL>/scripts/plan.py" "<WORK>"
python "<SKILL>/scripts/templates.py" "<WORK>" --install

3. 타임라인 빌드. 이 단계는 빌딩 블록을 내보내고, 타임라인 파일을 작성하며, 가져오고, API가 설정할 수 있는 설정을 적용하고, 결과를 확인하며, 이 빌드의 두 스크래치 타임라인을 제거합니다. 이 폴더가 빌드한 타임라인만 교체하며, 수동으로 편집한 내용은 손실되므로, 사용자가 편집했을 가능성이 있다면 먼저 물어보세요.

result = build_film(project, WORK)

verify.problems는 비어 있어야 합니다. done이 false이면 result = finish_batch(project, WORK)를 true가 될 때까지 반복한 후 result = dict(verify=verify(project, WORK), cleanup=cleanup(project, WORK))를 실행하세요. Resolve가 새로 설치된 타이틀을 인식하는 데 몇 초가 걸릴 수 있으므로 build_film은 이를 기다립니다. 그래도 삽입할 수 없으면 사용자에게 작업을 저장한 후 Resolve를 다시 시작하라고 요청하세요.

여기나 정리할 때 빈을 삭제하지 마세요: 클립은 한 빈에서 다른 타임라인으로 연결될 수 있습니다(references/how-it-works.md 참조).

4. 확인하기. 이 단계는 타임라인에서 직접 레이블이 지정된 프레임 시트를 내보냅니다: 각 씬, 각 하이라이트의 중간, 각 클릭 직후. 몇 초가 걸리며 렌더링이 필요 없으므로 렌더 설정이 변경되지 않습니다. build/review/에서 시트를 여세요.

result = review_frames(project, WORK)

하이라이트가 요소 위에 있는지, 커서가 올바른 위치에 있는지, 리플이 보이는지, 캡션이 적절한지, 아무것도 검은색이 아닌지 확인하세요. 자세히 보려면 review_frames(project, WORK, seconds=[10.5, 20.2])를 사용하여 타임라인 시간(초) 기준으로 해당 순간을 전체 크기로 제공합니다. plan.py는 각 씬이 시작되는 시간을 출력하여 씬 시간으로 변환합니다.

프레임은 Resolve 21.2에서 테스트된 동일한 프레임의 렌더링과 일치합니다. review_frames는 21.2에 있는 프레임 내보내기 API가 필요합니다. 이전 Resolve에서는 오류가 발생하며, 아래 렌더링이 그 역할을 합니다: 참조 없이 review.py를 실행하여 동일한 시트를 얻으세요.

5. 파일이 필요할 때 렌더링하기. 사용자에게 비디오를 제공하거나 remotion-to-resolve의 비교를 위해 렌더링하세요. start_render는 프로젝트의 렌더 설정을 변경하므로 이를 알려주세요.

result = start_render(project, WORK, 'review')
result = wait_render(project, '<job id>', 50)   # 상태가 Complete가 될 때까지 반복
python "<SKILL>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4"

자신의 작업만 제거하세요. 큐에 사용자의 작업이 있을 수 있기 때문입니다:

result = remove_job(project, '<job id>')

무언가를 변경하려면 film.json을 편집하고, plan.py를 실행한 후 build_film을 다시 호출하고, 다시 확인하세요. 렌더링했다면 먼저 작업을 제거하세요. 브랜드나 fps가 변경되었다면 templates.py도 다시 실행하세요. 사용자가 타임라인을 수동으로 편집한 경우, 재빌드하기 전에 물어보거나 타임라인에서 수동으로 변경하세요.

마무리

저장은 사용자가 요청하지 않는 한 사용자에게 맡기세요. 저장은 열려 있는 다른 편집 내용도 함께 커밋하기 때문입니다. 보고할 사항:

  • 타임라인, 빈 및 트랙
  • 타이틀이 설치된 위치
  • 새 타임라인이 현재 타임라인이 되었으며, preflight가 열려 있던 기존 타임라인의 이름을 알려주고, 렌더링했다면 렌더 설정이 변경되었음을 알림
  • 추론한 캡션 내용 및 브리프와 상충되는 스크린샷 내용
  • 확인한 사항과 확인하지 않은 사항. 프레임은 화면을 보여주지만, 움직임이나 Inspector 및 타임라인이 Resolve에서 어떻게 보이는지는 보여주지 않습니다.
  • 근사값으로 처리한 사항과 이러한 한계: 오디오 없음, 정지 이미지만, 카메라 이동 중 프레임에 남아 있는 하이라이트

클립은 디스크의 파일에서 가져오므로, 영화 폴더나 스크린샷을 이동하면 클립이 오프라인이 됩니다. build/assets/도 유지하세요. 커서와 배경이 여기에 있기 때문입니다.

브랜드의 타이틀을 Effects Library에서 제거하려면 templates.py "<WORK>" --uninstall을 실행하세요. 해당 브랜드의 네 파일만 제거합니다. 이미 빌드된 타임라인은 자체 복사본을 유지합니다: 제거 후 렌더링해도 결과는 동일했습니다.

Individual skills in this repo

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

관련 스킬