Communitygithub.com

video-edit

사용자가 동영상 편집, 클립拼接, 인트로 이미지 추가, 프레임/오디오 추출, MP4 내보내기를 할 때 사용합니다 (Android 호스트 weizhi:video). 데스크톱은 MediaCodec이 없어 사용 불가.

video-edit란 무엇인가요?

이 스킬은 Android 환경에서 동영상 편집 작업을 수행하기 위한 AI 에이전트 도구입니다. `weizhi:video` 네이티브 패키지를 기반으로 하며, `exportVideo` API를 통해 다양한 편집 기능을 제공합니다. 사용자는 v1 단순 편집(클립 자르기, 붙이기)과 v2 고급 편집(다중 트랙, 이미지/Ken Burns 효과, 크로스페이드)을 선택할 수 있으며, 자체적으로 프레임이나 오디오 추출도 지원합니다. 이 스킬은 데스크톱 환경(MediaCodec 부재)에서는 동작하지 않으므로, Android 호스트에서만 사용 가능합니다. 작업은 `jobs/*.js` 스크립트로 작성되며, `run_js`를 통해 실행됩니다. 주요 API 호출 전 `find_caps`로 적절한 시그니처를 확인해야 하며, 오류 발생 시 재확인이 필요합니다. 복잡한 프로젝트는 v1으로 중간 결과를 내보낸 후 v2로 합치는 방식으로 최적화할 수 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/fengshihao/agent1-skills/tree/main/skills-src/video-edit

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

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

미리보기

스킬 README에서

문서

동영상 편집 (weizhi:video)

범위

함안 함
probe, 프레임/오디오 추출, exportVideo 내보내기webview_exec로 전체 mp4 디코딩
v1 remux: 앞뒤 자르기, 페이드 없는 연결데스크톱 트랜스코딩 지원 가짜 구현 (데스크톱에는 본 패키지 없음)

시작 규칙

  1. 먼저 load_skill (video-edit) 로 본문을 읽습니다.
  2. exportVideo 또는 복잡한 타임라인을 작성하기 전에 find_caps 를 한 번 호출합니다 (query에 exportVideo weizhi:video 또는 구체적인 능력 포함). 반환된 호출 예제를 따라 작성하고, 필드명을 추측하지 마십시오.
  3. 스크립트는 jobs/*.js에 넣고, run_js의 file로 실행합니다. timeout_ms를 늘릴 수 있습니다 (최대 600000).
  4. 스크립트 내 API 오류 (예: bad argument, unsupported) 발생 시 find_caps 로 시그니처를 다시 확인한 후 스크립트를 수정합니다.

경로 선택

작업API
하나의 구간 자르기, 여러 구간 이어붙이기, 재인코딩 없음v1 exportVideo({ clips: [{ path, startMs?, endMs? }], output })
다중 트랙, 이미지 인트로, Ken Burns 효과, 크로스페이드v2 exportVideo({ width, height, tracks, output })

타임라인 v2 (핵심 사항)

  • 인트로 / 이미지: type: "image" 트랙 사용, durationMs 필수.
  • mp4 클립: type: "video" 트랙 사용, inMs / outMs 사용; 이미지를 video 트랙에 넣지 마십시오.
  • 크로스페이드 (image 트랙만): 뒤 클립에 transition: { type: "crossfade", durationMs: D }를 작성하고,
    startMs_다음 = startMs_이전 + durationMs_이전 - D (정확히 D 밀리초 겹침). crossfadeMs 필드는 없습니다.
  • 같은 트랙에서 transition을 선언하지 않은 클립은 시간이 겹칠 수 없습니다; overlapping clips 오류가 발생하면 위 식과 transition을 확인하십시오.
  • transition과 클립 자체의 opacity 키프레임을 동시에 사용할 수 없습니다.
  • 오디오 트랙: type: "audio"로 별도 트랙을 사용합니다.

예제 (두 이미지 페이드 + 비디오 연결):

import { exportVideo } from "weizhi:video";

const D = 300;
await exportVideo({
  width: 720,
  height: 1280,
  tracks: [
    {
      type: "image",
      clips: [
        { src: "a.jpg", startMs: 0, durationMs: 1000 },
        {
          src: "b.jpg",
          startMs: 1000 - D,
          durationMs: 1000,
          transition: { type: "crossfade", durationMs: D },
        },
      ],
    },
    {
      type: "video",
      clips: [{ src: "clip.mp4", startMs: 1700, inMs: 0, outMs: 5000 }],
    },
  ],
  output: "out/final.mp4",
});

권장 워크플로우

  1. probe로 원본 비디오의 길이와 해상도를 확인합니다.
  2. 커버 프레임이 필요하면: extractFrame / extractFrames 사용 (find_caps 참조).
  3. 복잡한 프로젝트: 먼저 v1으로 중간 결과 part1.mp4, part2.mp4를 내보낸 후, v1 또는 v2로 연결합니다; 같은 트랙에 페이드 선언 없이 클립을 강제로 겹치지 마십시오.
  4. 배경 음악: 별도의 audio 트랙, outMs를 영상 전체 길이에 맞춥니다.

구성

  • 하나의 jobs/render.js 스크립트에서 직렬로 프로브, 내보내기, 검증을 수행합니다 (완성된 파일을 다시 probe 가능).
  • 외부에서 여러 도구를 사용하여 하나의 스크립트를 대체하지 마십시오.

사용자에게 설명하는 방법

완성된 파일 이름과 길이를 알려줍니다; [완성파일](out/xxx.mp4) 링크를 사용합니다. 기술 용어를 나열하지 마십시오.

관련 스킬