Communitygithub.com

WEBGRS/reframe

가로 풍경 영상을 세로(9:16), 정사각형 또는 4:5 필름으로 재구성합니다. 모든 장면이 중요한 내용(화자, 움직이는 대상, 장면의 핵심)을 중심으로 자르고, 화면을 가로지르는 주제를 따라가며, 원본 영상을 다시 인코딩하지 않습니다. 먼저 각 장면을 측정하고 확인할 수 있는 윈도우를 프레임에 표시하며, 완성된 film.html을 동일한 규칙으로 검증합니다.

reframe란 무엇인가요?

WEBGRS/reframe은 가로 영상을 세로 또는 정사각형 비율의 필름으로 변환하는 AI 에이전트 스킬입니다. 각 장면의 내용을 분석하여 화자, 움직이는 물체 등 핵심 피사체가 항상 프레임 안에 들어오도록 자동으로 크롭을 생성합니다. Cursor, Claude Code, Codex 등 다양한 플랫폼에서 사용할 수 있으며, 영상을 다시 인코딩하지 않고 CSS `object-fit: cover`와 `translate`를 활용하여 원본 품질을 유지합니다. 모든 크롭은 측정 결과를 시각적으로 확인할 수 있는 검토 시트(sheet)로 제공되며, 사용자가 직접 조정할 수 있습니다. `check` 명령을 통해 완성된 film.html이 정의된 규칙을 준수하는지 검증하고 위반 사항을 표시합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WEBGRS/openfilm-reframe/tree/HEAD/skills/reframe

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

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

문서

reframe은(는) 무엇을 하나요?

사용자의 가로 영상을 세로 또는 정사각형 필름으로 변환하여 처음부터 그 비율로 촬영된 것처럼 보이게 합니다. 모든 순간에 시청자는 장면의 핵심을 보게 되며, 옆의 벽이나 반쪽 얼굴은 보지 않습니다.

정의

각 장면은 자신의 내용에 맞게 프레임이 지정됩니다. 전체 비디오에 대해 하나의 중앙 크롭을 사용하는 것은 깔끔해 보여도 이 방식이 아니며, 흐릿한 바 사이에 전체 가로 프레임을 축소하는 것도 아닙니다.

충족해야 할 조건

  • 측정한 후, 눈으로 확인합니다. 모든 윈도우는 측정 결과와 사용자가 직접 사진을 본 결과에서 비롯됩니다. 측정이 틀릴 수 있으며, 사진이 최종 결정을 내립니다.
  • 피사체는 온전히 유지됩니다. 얼굴, 화자, 움직이는 물체 및 중요한 단어는 주변에 여유 공간을 두고 프레임 안에 머물러야 합니다. 두 가지가 중요하고 둘 다 맞지 않을 때, 프레임은 그 순간의 주제(말하는 사람, 움직이는 것, 내레이션이 지칭하는 것)로 이동하며, 시청자는 생략된 내용을 듣게 됩니다.
  • 안정적인 프레임. 움직이지 않는 피사체는 장면 전체에 대해 하나의 고정 윈도우를 사용합니다. 윈도우는 피사체가 움직일 때만 이동합니다: 마지막 이동 후 최소 1초 후에 단단히 재배치하거나 부드럽게 따라가며, 절대 떠다니거나 떨리는 크롭을 사용하지 않습니다.
  • 원본 영상 그대로. 동일한 파일을 #t=로 자르고 클립의 자체 CSS(object-fit: cover + object-position, 또는 translate로 이동된 영상 형태의 박스)로 크롭합니다. 다시 인코딩하거나 새 파일로 크롭하거나 속도를 변경하지 않습니다. 한 장면의 클립들은 프레임 대 프레임으로 만나므로 장면의 사운드는 끊김 없이 이어집니다.

제공되는 기능

node <이 스킬의 폴더>/scripts/reframe.mjs <비디오> --aspect 9:16 --src assets/<파일> (영화 폴더에서 실행)은 reframe/<이름>.json, 검토 페이지 및 reframe/<이름>-sheet.jpg를 생성합니다. 장면을 찾고, 움직임(카메라 자체 움직임 제거), 디테일, 색상 대비 및 피부 톤을 초당 10회 측정하여 각 장면에 대해 fixed(단일 클립), split(동일 파일의 여러 클립, 각각 최소 1초, 각각 고유 위치) 또는 whole(원본 영상 형태) 윈도우를 할당하며, 각각의 소스 시간에 맞춘 준비된 <video> 줄을 제공합니다.

출력된 모든 시트를 읽으십시오 (look: … (Read it)). 각 그림은 한 순간(각 클립의 시작, 가장 약한 순간은 WEAKEST로 표시, 1.5초마다 하나)을 나타냅니다: 윈도우가 윤곽선으로 표시되고 외부가 어두워진 프레임, 프레임 % 단위의 눈금자, 그리고 영화에 표시되는 크롭입니다. 피사체가 윈도우 밖에 있거나 잘린 경우, 직접 object-position을 설정하십시오. 출력은 공식을 제공합니다. held는 윈도우가 측정값과 일치하는 빈도를 나타내며, 피사체가 안에 있다는 증거는 아닙니다. !로 표시된 줄은 특히 주의 깊게 봐야 할 곳을 나타냅니다.

부드러운 추적 (--follow): 분할 샷의 경로와 이를 적용하는 <video> 클립 하나를 위한 translate의 @keyframes follow-N이 reframe/<이름>-follow.css에도 생성됩니다. 키프레임을 film.html의 <style>에 넣으십시오. 애니메이션은 클립의 at 시간에 따라 클립 자체 시간으로 실행됩니다: 클립이 at에서 a초 후에 시작하도록 자른 경우 animation-delay: -a s를 사용합니다. 클립은 자체 사운드를 유지합니다.

장면 자르기: 새로운 #t= 안에 있는 클립만 유지하며, 바깥쪽 두 클립은 잘리고 위치는 변경되지 않습니다.

작성된 영화 확인: 영화 폴더에서 node <이 스킬의 폴더>/scripts/reframe.mjs check를 실행하면 film.html의 자체 크롭을 읽고 각 윈도우, 이동 시간, 각 재배치, 윈도우가 측정값을 가장 적게 유지하는 순간을 출력하고 시트에 그립니다. 위 규칙을 위반하는 항목을 !로 나열합니다. 모든 !를 수정하고 다시 실행하십시오.

영화의 형태는 뷰포트(<meta name="viewport" content="width=1080, height=1920">)입니다. npx openfilm look을 실행하면 잘린 영화를 볼 수 있습니다.

사용자와의 협업

사용자가 요청하는 것이 우선입니다: 형태(세로일 때 9:16), 반드시 포함되어야 할 장면, 프레임 안에 유지되어야 할 것(제품, 로고, 두 번째 화자). 작업을 지연시키지 않고 질문하십시오. 완료되면 장면별로 held, 모든 ! 줄, 이동한 각 윈도우와 그 이유, 크롭에서 생략된 내용을 설명하십시오.

관련 스킬