Communitygithub.com

13kailouis-stack/wecut

로컬 환경에서 FFmpeg를 사용해 비디오를 자르고, 자막을 추가하고, 편집하는 `wecut` CLI 도구입니다. 클라우드나 API 키 없이 짧은 클립 제작, 자막 또는 가라오케 자막 추가, 비디오 트리밍/연결, 사진 슬라이드쇼, 텍스트/로고/음악/전환 효과, 9:16/1:1/16:9 비디오 렌더링, 바이럴 영상 분석 및 템플릿 재사용이 가능합니다.

wecut란 무엇인가요?

WeCut은 로컬 머신에 설치된 FFmpeg를 사용하여 JSON 프로젝트 파일을 MP4 또는 GIF로 렌더링하는 강력한 CLI 도구입니다. 네트워크 호출 없이 완전히 오프라인으로 작동하며, 비디오 편집에 필요한 다양한 기능을 제공합니다. 사용자는 JSON 형식으로 편집 내용을 기술하기만 하면 되며, WeCut이 자동으로 비디오 작업을 수행합니다. 주요 기능으로는 클립 자르기/이어붙이기, 자막 및 가라오케 스타일 자막 추가, 텍스트 오버레이, 오디오 믹싱, 전환 효과, 이미지 슬라이드쇼, 다양한 해상도(9:16, 1:1, 16:9) 렌더링 등이 있습니다. 또한 바이럴 비디오를 분석하여 효과적인 편집 템플릿(레시피)을 추출하고 재사용할 수 있는 고유한 워크플로를 지원합니다. MCP 서버로 연결될 경우 `wecut_doctor`, `wecut_probe`, `wecut_render` 등의 도구를 제공하며, Node.js 16+ 환경에서 `npx -y wecut`으로 실행 가능합니다. 이 도구는 AI 에이전트가 사용자 요청에 따라 복잡한 비디오 편집 작업을 로컬에서 안전하고 빠르게 수행할 수 있도록 설계되었습니다.

지원 대상~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/13kailouis-stack/wecut/tree/HEAD/skills/wecut

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

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

문서

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

wecut은 이 머신에 설치된 FFmpeg를 사용하여 JSON 프로젝트를 MP4(또는 GIF)로 렌더링합니다. 편집 내용을 기술하면 WeCut이 비디오 작업을 수행합니다. 네트워크 서비스를 호출하지 않습니다.

wecut이 PATH에 없으면 아래 모든 명령어 대신 npx -y wecut(Node 16+)을 사용하세요. WeCut이 MCP 서버로 연결된 경우, 동일한 단계가 wecut_doctor, wecut_probe, wecut_validate, wecut_preview(프레임을 이미지로 반환), wecut_render, wecut_list, wecut_schema, wecut_example, wecut_analyze(프레임 시트를 이미지로 반환), wecut_recipe_list, wecut_recipe_show, wecut_recipe_apply, wecut_recipe_from_project 도구로 제공됩니다. 프로젝트는 project(객체) 또는 projectFile(경로)로 전달합니다.

워크플로

  1. 머신 확인: wecut doctor. FFmpeg가 없다고 보고하면 hint를 따르세요(예: sudo apt-get install -y ffmpeg).
  2. 미디어를 작업 공간에 배치. 프로젝트의 모든 경로는 wecut을 실행하는 폴더(또는 --root DIR)를 기준으로 합니다. URL은 거부됩니다. 먼저 파일을 다운로드하세요.
  3. 미디어 확인: wecut probe media/talk.mp4 media/music.mp3는 길이, 크기, fps 및 오디오 유무를 제공합니다. 이 숫자를 from/to에 사용하세요.
  4. project.json 작성(형식은 아래 참조). wecut example podcast-clip은 전체 예제를 출력합니다. wecut schema는 JSON 스키마를 출력합니다. wecut list는 모든 스타일, 글꼴, 전환 및 필터 이름을 보여줍니다.
  5. 검증: wecut validate project.json. 오류는 JSON 포인터(/clips/0/to)와 hint와 함께 반환됩니다. 수정하고 반복하세요.
  6. 렌더링 전 미리보기: wecut preview project.json --at 0.5,3,10은 작은 JPG 프레임을 out/preview/에 씁니다. 열어서 프레이밍, 텍스트 크기 및 캡션 위치를 확인하세요.
  7. 렌더링: wecut render project.json. 빠른 540p 확인을 위해 --preset draft를, 최종 결과물을 위해 기본값 final을 사용하세요.

모든 명령어는 하나의 JSON 객체를 출력합니다. 종료 코드: 0 정상, 2 잘못된 입력, 3 누락된 종속성, 4 렌더링 실패, 5 제한 초과. wecut render -로 프로젝트를 파이프로 전달할 수 있습니다.

프로젝트 형식

{
  "wecut": "1",
  "output": { "file": "out/clip-01.mp4", "ratio": "9:16", "res": 1080, "fps": 30 },
  "clips": [
    { "src": "media/talk.mp4", "from": 754.2, "to": 781.0, "focus": { "x": 0.42, "y": 0.5 } },
    { "src": "media/talk.mp4", "from": 795.5, "to": 812.0, "zoom": 1.15 }
  ],
  "texts": [
    { "text": "How I made my first $10k", "start": 0, "end": 3, "style": "hook", "y": 0.2, "in": { "type": "pop" } }
  ],
  "captions": { "words": "media/talk.words.json", "src": "media/talk.mp4", "style": "karaoke" },
  "audio": [ { "src": "media/music.mp3", "volume": 25, "loop": true, "duck": true, "fadeOut": 1.5 } ]
}

중요한 규칙:

  • 두 가지 시계. 클립의 from/to는 소스 파일의 초 단위입니다. 다른 모든 것(texts, overlays, audio.at, filters, effects)은 완성된 비디오의 초 단위입니다. wecut validate는 완성된 duration을 출력합니다.
  • 전환은 겹칩니다. 클립 N의 transition은 클립 N+1과 블렌딩되어 비디오가 duration만큼 짧아집니다.
  • 프레이밍. 기본 fit은 cover(채우고 자르기)입니다. focus(0..1; x 0.3은 왼쪽 유지)와 zoom으로 자르기를 조정하세요. "fit": "contain"과 "background": "blur"를 사용하여 전체 프레임을 표시합니다.
  • 위치는 캔버스의 분수이며, 0.5는 중앙입니다. 글꼴 size는 1080p에서 픽셀 단위입니다.
  • 이미지는 duration(기본값 3)을 사용하며 motion: in, out, left, right, up, down을 가질 수 있습니다.
  • 이모지는 텍스트로 그려지지 않습니다. PNG에 넣고 overlays를 사용하세요.

캡션

단어 타이밍이 포함된 대본을 WeCut에 제공하면 자막을 빌드합니다:

  • words: .json, .srt 또는 .vtt 경로, 또는 인라인 배열 [{"word": "hi", "start": 0.1, "end": 0.4}]입니다. OpenAI/Groq verbose_json 및 whisper.cpp JSON은 그대로 읽힙니다.
  • src: 대본이 속한 비디오로 설정합니다. 그러면 대본은 소스 파일 자체의 시간을 유지하고, WeCut은 해당 파일에서 잘라낸 각 클립을 통해 출력 타임라인으로 모든 단어를 이동합니다(속도 포함). src가 없으면 시간이 이미 출력 시간이어야 합니다.
  • style: classic, yellow, box-black, box-white, bold, comic, shadow(한 번에 한 구절), karaoke, karaoke-green(말하는 단어가 빛남), pop(한 번에 하나의 큰 단어).

대본이 필요한 경우: wecut doctor는 이 FFmpeg에 Whisper 필터가 있을 때 local_transcription: true를 보고합니다. 그렇지 않으면 이미 가지고 있는 음성-텍스트 변환 도구를 사용하고 단어 타이밍을 JSON으로 저장하세요.

템플릿: 효과적인 것을 복사하세요

레시피는 내용 없이 편집 모양입니다. 예를 들어 헤드라인 카드가 있는 5초 훅, 그 다음 토크와 같은 섹션, 텍스트 슬롯, 캡션 및 음악 스타일, 효과가 포함됩니다. 새로운 클립, 단어 및 음악에 적용하면 프로젝트가 생성됩니다.

  1. 효과 있었던 비디오 분석: wecut analyze media/viral.mp4는 샷과 페이스, 처음 3초 컷, 플래시, 템포, 일시 정지, 무음 플랫폼 아웃트로(생략), 그리고 sheet: 각 샷의 프레임 하나를 단일 이미지로 반환합니다. 시트에서 헤드라인 카드, 텍스트 스타일, 프레이밍 및 캡션 스타일을 확인하세요.
  2. 레시피 선택 또는 작성: wecut recipe list(내장: news-headline, news-headline-blur, quote-hook, vlog-phrases, podcast-punch, photo-slideshow, 그리고 작업 공간의 recipes/*.json). wecut recipe show <name>은 역할과 텍스트 슬롯을 나열합니다. 작성하려면 wecut recipe schema를 따르세요.
  3. 적용:
{
  "recipe": "news-headline",
  "clips": [
    { "src": "media/broll.mp4", "role": "hook" },
    { "src": "media/talk.mp4", "from": 120, "to": 165 }
  ],
  "texts": { "label": { "text": "Page name" }, "headline": { "text": "The claim in one line", "emphasis": ["claim"] } },
  "transcript": "media/talk.words.json",
  "write": "projects/clip-01.json"
}

wecut recipe apply --input request.json(또는 stdin에 JSON이 있는 --input -)은 모든 것을 확인하고 프로젝트를 저장합니다. 그런 다음 preview 및 render하세요. 역할이 없는 클립은 body를 제공합니다. 클립이 없는 섹션은 다음 섹션 영상의 시작 부분을 빌립니다.

  1. 자신의 레시피 저장: wecut recipe from-project projects/clip-01.json --name my-style --write recipes/my-style.json은 섹션, 전환, 텍스트 슬롯, 캡션 스타일, 효과 및 음악을 기본 트랙으로 유지합니다.

음악: 레시피는 자체 트랙(music.src)을 가질 수 있으며, CapCut 템플릿의 노래처럼 기본적으로 사용됩니다. "music": "media/song.mp3"(또는 사운드가 사용되는 비디오)를 전달하여 교체하거나, "none"을 전달합니다. 다른 사람의 비디오에서 가져온 노래는 업로드 후 플랫폼에 의해 음소거될 수 있습니다. 게시할 때 앱에서 트렌딩 사운드를 추가하면 이를 피할 수 있습니다.

내용이 아닌 구조를 복사하세요: 다른 제작자의 영상, 정확한 문구 및 음악은 그들의 소유입니다.

하나의 긴 비디오에서 여러 클립 만들기

  1. wecut probe로 소스를 확인하고 단어 타이밍이 포함된 대본을 얻습니다.
  2. 대본을 읽고 순간을 선택합니다(사용자가 결정하며, WeCut은 내용을 판단하지 않습니다).
  3. 각 클립에 대해 하나의 프로젝트를 작성하고, 각각 captions.src가 소스를 가리키도록 하여 하나의 대본이 모든 클립에 사용되도록 합니다.
  4. wecut preview로 하나를 미리보고, focus를 조정한 다음 각각 wecut render합니다.

문제 해결

  • E_RANGE: to가 파일 끝을 지났습니다. 실제 길이를 확인하려면 wecut probe를 사용하세요.
  • E_PATH: 경로가 작업 공간 외부에 있거나 URL입니다.
  • E_MEDIA: 파일이 읽을 수 있는 비디오, 이미지 또는 오디오 파일이 아니거나 해당 필드에 잘못된 종류입니다(클립에 음악, 오버레이에 비디오).
  • E_DEPENDENCY: FFmpeg가 없거나, 6보다 오래되었거나, libass 없이 빌드되었습니다. wecut doctor를 실행하세요.
  • 렌더링이 너무 느림: --preset draft, 더 낮은 output.res 또는 프로젝트당 더 적은 클립을 사용하세요. 결과의 render_seconds 및 realtime_factor는 이 머신의 속도를 알려줍니다.
  • FFmpeg가 정확히 무엇을 실행할지 보려면: wecut render project.json --dry-run.

관련 스킬