Communitygithub.com

비디오 편집기

사용자가 비디오를 편집, 생성, 자르기, 압축, 병합, 크기 변경, 속도 변경, 안정화, 전환 효과 추가, 자막 생성, 타이틀 카드, 로우어 서드, 엔드 카드 제작, 티저 생성, 썸네일 추출, GIF 만들기, 워터마크 추가, 오디오 조작 또는 비디오 파일을 처리하고자 할 때 사용합니다.

비디오 편집기란 무엇인가요?

이 AI 스킬은 비디오 편집 워크플로우를 세 가지 강력한 엔진(ffmpeg, Remotion, Whisper)으로 통합 자동화합니다. ffmpeg는 기존 영상 자르기, 압축, 병합, 크기 변경, 속도 조절, 안정화, 워터마크, GIF, 썸네일, 오디오 추출 및 변환을 처리하며, Apple Silicon의 하드웨어 가속(h264_videotoolbox / hevc_videotoolbox)을 지원해 성능을 크게 향상시킵니다. Remotion은 React 기반으로 타이틀 카드, 로우어 서드, 엔드 카드, 애니메이션 오버레이를 생성하며, 캐시된 워크스페이스를 통해 반복적인 npm install을 방지합니다. Whisper는 음성 인식 기반의 자막(SRT/VTT) 생성 및 영상에 자막을 입히는 작업을 수행합니다. 이 스킬은 `/trim`, `/compress`, `/merge`, `/resize`, `/speed`, `/stabilize`, `/watermark`, `/title-card`, `/teaser`, `/transcribe` 등 구체적인 명령어를 제공하며, YouTube, Instagram, TikTok 등 플랫폼별 출력 프리셋과 사용자 정의 테마(색상 팔레트)를 지원합니다. 또한 `/pipeline` 명령어를 통해 여러 단계를 순차적으로 처리하는 통합 워크플로우를 구성할 수 있습니다. 봇은 ffmpeg 명령의 각 플래그를 평이한 영어로 설명하고 사용자에게 실행 확인을 요청한 후 결과(출력 경로, 파일 크기, 재생 시간)를 보고합니다.

지원 대상~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/ElSalvatore-sys/video-editor-plugin/tree/main/skills/video-editor

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

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

문서

비디오 편집기은(는) 무엇을 하나요?

개요

세 가지 엔진으로 구동되는 AI 기반 비디오 워크플로우:

  • ffmpeg -- 기존 영상 편집 (자르기, 압축, 병합, 크기 변경, 속도 조절, 안정화, 워터마크, 오디오, GIF, 썸네일, 전환 효과, 자막)
  • Remotion -- 새 비디오 콘텐츠 생성 (타이틀 카드, 로우어 서드, 엔드 카드, 티저, 애니메이션 오버레이)
  • Whisper -- 받아쓰기 및 자막 생성

추가 기능:

  • Apple Silicon 하드웨어 가속 (h264_videotoolbox / hevc_videotoolbox)
  • ~/design-assets/color-palettes/ 디자인 에셋과의 테마 통합
  • YouTube, Instagram, TikTok, Twitter 등 플랫폼 프리셋
  • Remotion의 반복 npm install을 피하기 위한 워크스페이스 캐싱

사용 시기

사용자의 다음 의도 중 하나라도 감지되면 실행하세요:

카테고리키워드
기본 편집자르기, 트림, 클립, 줄이기, 분할
압축압축, 크기 줄이기, 축소, 더 작게, 최적화
병합병합, 결합, 연결, 이어붙이기, 스티치
크기 변경크기 변경, 스케일, 자르기, 패딩, 화면비, 세로, 가로, 정사각형
속도속도 올리기, 느리게, 슬로우 모션, 타임랩스, 빨리 감기, 역재생
안정화안정화, 흔들림, 부드럽게, 떨림 제거
전환 효과페이드, 크로스페이드, 디졸브, 와이프, 전환
자막자막, 캡션, SRT, 받아쓰기, 음성을 텍스트로
타이틀 카드타이틀 카드, 인트로, 오프닝, 애니메이션 텍스트
로우어 서드로우어 서드, 이름표, 자막바, 이름 바
엔드 카드엔드 카드, 아웃트로, 엔드 스크린, 클로징
티저티저, 트레일러, 프로모, 하이라이트 릴, 몽타주
썸네일썸네일, 포스터, 프레임 추출, 스크린샷
GIFGIF, 애니메이션 이미지, 루프, 밈
워터마크워터마크, 로고 오버레이, 브랜딩
오디오오디오, 볼륨, 노멀라이즈, 라우드니스, 음소거, 페이드 인, 페이드 아웃, 믹스, 오디오 추출
정보정보, 세부 정보, 재생 시간, 해상도, 코덱, 비트레이트, 메타데이터
파이프라인파이프라인, 배치, 워크플로우, 다단계
플랫폼YouTube, Instagram, TikTok, Twitter, Reels, Shorts

명령어 참조

편집 명령어 (ffmpeg)

명령어설명예시
/trim비디오에서 구간 자르기"video.mp4 0:30부터 1:45까지 자르기"
/compress품질 조절로 파일 크기 줄이기"10MB 미만으로 압축"
/merge여러 클립을 하나로 결합"clip1.mp4와 clip2.mp4 페이드 효과로 병합"
/resize크기, 화면비, 자르기, 패딩 변경"1080x1080 정사각형으로 크기 변경"
/speed속도 올리기, 늦추기, 역재생"2배속" 또는 "0.5배 슬로우 모션"
/stabilize카메라 흔들림 제거 (vidstab 2-pass)"shaky.mp4 안정화"
/watermark비디오에 이미지 또는 텍스트 오버레이"logo.png 오른쪽 아래에 추가"
/audio볼륨, 노멀라이즈, 믹스, 페이드, 추출, 음소거"오디오를 -14 LUFS로 노멀라이즈"
/thumbnail프레임을 이미지로 추출"0:15 지점 썸네일"
/gif비디오 구간에서 애니메이션 GIF 생성"0:05부터 0:10까지 320px GIF"
/extract오디오 또는 자막 트랙 추출"오디오를 mp3로 추출"
/info비디오 메타데이터 및 스트림 정보 표시"video.mp4 정보"

생성 명령어 (Remotion)

명령어설명예시
/title-card테마 지원 애니메이션 타이틀 카드"타이틀 카드: Coming Soon, wad 테마, 줌 애니메이션"
/lower-third애니메이션 이름/직함 오버레이"로우어 서드: John Doe, CEO, 모던 스타일"
/end-cardCTA 및 소셜 미디어 포함 애니메이션 아웃트로"엔드 카드: 구독!, @handle, ea 테마"
/teaser전환 효과와 타이틀이 포함된 멀티클립 몽타주"clips/ 폴더에서 30초 티저"

받아쓰기 명령어 (Whisper)

명령어설명예시
/transcribe음성으로 SRT/VTT 생성"interview.mp4 받아쓰기"
/add-captions받아쓰기 후 비디오에 자막 입히기"talk.mp4에 자막 추가"

조정 명령어

명령어설명예시
/pipeline다단계 처리 체인"자르기, 타이틀 카드 추가, Instagram용 압축"

워크플로우

1단계: 사용 가능한 도구 확인

which ffmpeg ffprobe && echo "ffmpeg: ok"
node --version && echo "node: ok"
which whisper && echo "whisper: ok" || echo "whisper: 설치되지 않음 (자막은 수동 .srt 필요)"
ffmpeg -encoders 2>/dev/null | grep videotoolbox && echo "hw accel: ok" || echo "hw accel: 사용 불가"
ffmpeg -filters 2>/dev/null | grep vidstab && echo "vidstab: ok" || echo "vidstab: 사용 불가 (brew install ffmpeg --with-libvidstab)"

ffmpeg가 없으면: "brew install ffmpeg로 설치" Node.js가 없으면: "https://nodejs.org에서 설치하거나 brew install node로 설치" vidstab이 없으면: "ffmpeg를 vidstab과 함께 재설치: brew install ffmpeg --with-libvidstab"

2단계: 요청 분류

사용자 의도엔진경로
기존 영상 편집ffmpeg3a단계
새 비디오 콘텐츠 생성Remotion3b단계
오디오 조작ffmpeg 오디오 필터3a단계
정보/검사ffprobe3a단계
결합 파이프라인두 엔진 조정3c단계
플랫폼 게시크기 변경 + 압축 프리셋3a단계
받아쓰기Whisper + ffmpeg3a단계

3a단계: ffmpeg 경로

  1. 제공되지 않은 경우 입력 파일 요청
  2. ffprobe로 검사:
    ffprobe -v quiet -print_format json -show_format -show_streams "<file>"
    
  3. 하드웨어 가속 감지 (macOS Apple Silicon):
    # VideoToolbox 지원 확인
    ffmpeg -encoders 2>/dev/null | grep h264_videotoolbox
    # 사용 가능하면: -c:v h264_videotoolbox -b:v 5M 선호
    # 대체: -c:v libx264 -crf 23 -preset medium
    
  4. 출물 파일 충돌 처리:
    # 출력 파일을 쓰기 전에 파일이 존재하는지 확인
    # "trimmed_video.mp4"가 이미 있으면 "trimmed_video_2.mp4", "trimmed_video_3.mp4" 등 사용
    OUTPUT="trimmed_video.mp4"
    COUNTER=2
    while [ -f "$OUTPUT" ]; do
      OUTPUT="trimmed_video_${COUNTER}.mp4"
      COUNTER=$((COUNTER + 1))
    done
    
  5. ffmpeg 명령어 구성
  6. 각 플래그를 평이한 영어로 설명
  7. 출력 파일 이름 명시 (절대 원본 덮어쓰지 않음)
  8. 질문: "실행할까요?"
  9. 실행 후 확인:
    # 종료 코드 확인
    if [ $? -eq 0 ]; then
      echo "성공"
      ffprobe -v quiet -print_format json -show_format "$OUTPUT" | grep -E '"duration"|"size"'
    else
      echo "오류 — 위 ffmpeg 출력 확인"
    fi
    
  10. 출력 경로 + 파일 크기 + 재생 시간 보고

출물 파일 명명 규칙:

명령어출력 패턴
자르기trimmed_<filename>
압축compressed_<filename>
병합merged_output.<ext>
크기 변경resized_<filename>
속도speed_<factor>x_<filename>
안정화stabilized_<filename>
워터마크watermarked_<filename>
자막captioned_<filename>
오디오 추출<name>.mp3
오디오 수정audio_<filename>
자막 추출<name>.srt
썸네일thumb_<name>_<timecode>.jpg
GIF<name>.gif

3b단계: Remotion 경로

  1. Node.js 설치 확인
  2. 워크스페이스 캐싱 -- 기존 워크스페이스 재사용:
    WORKSPACE="/tmp/remotion-workspace"
    if [ -d "$WORKSPACE/node_modules" ]; then
      echo "캐시된 Remotion 워크스페이스 재사용"
    else
      echo "Remotion 워크스페이스 생성 (최초 실행)..."
      mkdir -p "$WORKSPACE"
      cp -r ~/project-templates/remotion-video/* "$WORKSPACE/"
      cd "$WORKSPACE" && npm install
    fi
    
  3. ~/design-assets/color-palettes/에서 테마 로딩:
    # 사용자가 테마(wad, bloghead, ea)를 지정하면 JSON에서 색상 로드
    # Remotion 컴포지션에 inputProps로 전달
    
  4. 필요에 따라 컴포지션 소스 파일 작성 또는 업데이트
  5. 사용 가능한 컴포지션:
    • TitleCard -- 여러 애니메이션 프리셋이 있는 애니메이션 타이틀
    • LowerThird -- 악센트 바가 있는 이름/직함 오버레이
    • EndCard -- CTA, 소셜 미디어, 로고가 포함된 아웃트로
    • Teaser -- TransitionSeries가 포함된 멀티클립 몽타주
  6. 렌더링:
    cd "$WORKSPACE"
    npx remotion render src/index.ts <CompositionId> /path/to/output.mp4 \
      --props='{"text":"Title","bg":"#09090B","fg":"#FFFFFF","accent":"#7C3AED"}'
    
  7. 출력을 사용자의 작업 디렉토리로 복사
  8. 출력 경로 + 재생 시간 보고

3c단계: 결합 파이프라인

다단계 요청(예: "타이틀 카드, 클립, 엔드 카드로 티저 만들기")의 경우:

  1. 계획 -- 실행 전 각 단계를 사용자에게 설명
  2. 생성 -- 먼저 Remotion 콘텐츠 생성 (타이틀 카드, 엔드 카드)
  3. 처리 -- ffmpeg로 소스 클립 자르기/크기 변경
  4. 조립 -- ffmpeg로 전환 효과를 포함한 모든 조각 병합
  5. 완료 -- 대상 플랫폼이 지정된 경우 압축
  6. 주요 단계(생성 vs 편집 vs 조립) 사이에 확인

ffmpeg 빠른 참조

자르기 (무손실)

ffmpeg -ss <start> -to <end> -i input.mp4 -c copy trimmed_input.mp4

압축 -- 웹 (CRF 23)

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k compressed_input.mp4

압축 -- 하드웨어 가속 (macOS)

ffmpeg -i input.mp4 -c:v h264_videotoolbox -b:v 5M -c:a aac -b:a 128k compressed_input.mp4

페이드 전환 효과로 병합

# 두 클립, 1초 크로스페이드, 오프셋 = clip1 길이 - 1
ffmpeg -i clip1.mp4 -i clip2.mp4 \
  -filter_complex "[0][1]xfade=transition=fade:duration=1:offset=<offset>,format=yuv420p[v];[0:a][1:a]acrossfade=d=1[a]" \
  -map "[v]" -map "[a]" merged_output.mp4

크기 변경 / 스케일

# 특정 크기로 스케일 (화면비 유지하려면 -1 사용)
ffmpeg -i input.mp4 -vf "scale=1920:1080" resized_input.mp4
ffmpeg -i input.mp4 -vf "scale=1080:-1" resized_input.mp4

# 중앙 정사각형으로 자르기
ffmpeg -i input.mp4 -vf "crop=min(iw\,ih):min(iw\,ih)" cropped_input.mp4

# 대상 화면비에 맞게 패딩 (레터박스/필러박스)
ffmpeg -i input.mp4 -vf "scale=1080:1080:force_original_aspect_ratio=decrease,pad=1080:1080:(ow-iw)/2:(oh-ih)/2:black" padded_input.mp4

속도 변경

# 2배속 (비디오 + 오디오)
ffmpeg -i input.mp4 -vf "setpts=0.5*PTS" -af "atempo=2.0" speed_2x_input.mp4

# 0.5배 슬로우 모션
ffmpeg -i input.mp4 -vf "setpts=2.0*PTS" -af "atempo=0.5" speed_0.5x_input.mp4

# 4배속 (2배 이상 오디오는 atempo 체인, atempo 최대는 2.0)
ffmpeg -i input.mp4 -vf "setpts=0.25*PTS" -af "atempo=2.0,atempo=2.0" speed_4x_input.mp4

# 역재생
ffmpeg -i input.mp4 -vf "reverse" -af "areverse" reversed_input.mp4

워터마크 오버레이

# 오른쪽 아래 패딩 포함
ffmpeg -i input.mp4 -i logo.png \
  -filter_complex "overlay=W-w-20:H-h-20" watermarked_input.mp4

# 왼쪽 위
ffmpeg -i input.mp4 -i logo.png \
  -filter_complex "overlay=20:20" watermarked_input.mp4

# 중앙 불투명도 포함
ffmpeg -i input.mp4 -i logo.png \
  -filter_complex "[1]format=rgba,colorchannelmixer=aa=0.3[wm];[0][wm]overlay=(W-w)/2:(H-h)/2" watermarked_input.mp4

# 텍스트 워터마크
ffmpeg -i input.mp4 \
  -vf "drawtext=text='My Brand':fontsize=24:[email protected]:x=W-tw-20:y=H-th-20" watermarked_input.mp4

비디오 안정화 (vidstab 2-pass)

# 패스 1: 움직임 분석
ffmpeg -i shaky.mp4 -vf vidstabdetect=shakiness=10:accuracy=15 -f null -

# 패스 2: 안정화 적용
ffmpeg -i shaky.mp4 -vf vidstabtransform=smoothing=30:input=transforms.trf stabilized_shaky.mp4

오디오 조작

# 볼륨 조절
ffmpeg -i input.mp4 -af "volume=1.5" audio_input.mp4

# 라우드니스 노멀라이즈 (방송 표준 -14 LUFS)
ffmpeg -i input.mp4 -af "loudnorm=I=-14:TP=-1:LRA=11" audio_input.mp4

# 두 오디오 트랙 믹스
ffmpeg -i video.mp4 -i music.mp3 \
  -filter_complex "[0:a]volume=1.0[a1];[1:a]volume=0.3[a2];[a1][a2]amix=inputs=2:duration=first[a]" \
  -map 0:v -map "[a]" audio_input.mp4

# 오디오 페이드 인/아웃 (3초 페이드 인, 3초 페이드 아웃)
ffmpeg -i input.mp4 -af "afade=t=in:ss=0:d=3,afade=t=out:st=<end-3>:d=3" audio_input.mp4

# 오디오 음소거
ffmpeg -i input.mp4 -an muted_input.mp4

# 오디오 교체
ffmpeg -i input.mp4 -i newtrack.mp3 -c:v copy -map 0:v:0 -map 1:a:0 replaced_audio_input.mp4

GIF 생성 (품질 위한 2-pass 팔레트)

# 패스 1: 팔레트 생성
ffmpeg -ss <start> -t <duration> -i input.mp4 \
  -vf "fps=15,scale=320:-1:flags=lanczos,palettegen" palette.png

# 패스 2: 팔레트를 사용하여 GIF 생성
ffmpeg -ss <start> -t <duration> -i input.mp4 -i palette.png \
  -filter_complex "[0:v]fps=15,scale=320:-1:flags=lanczos[v];[v][1:v]paletteuse" output.gif

# 정리
rm palette.png

썸네일 추출

# 타임스탬프에서 단일 프레임
ffmpeg -ss <timestamp> -i input.mp4 -frames:v 1 -q:v 2 thumb_input_<timestamp>.jpg

# 썸네일 그리드 (4x4)
ffmpeg -i input.mp4 -vf "fps=1/<interval>,scale=320:-1,tile=4x4" thumb_grid_input.jpg

.srt 자막 입히기

ffmpeg -i input.mp4 -vf "subtitles=captions.srt:force_style='FontSize=24,PrimaryColour=&H00FFFFFF'" captioned_input.mp4

오디오 추출

ffmpeg -i input.mp4 -vn -c:a libmp3lame -q:a 2 output.mp3

비디오 정보

ffprobe -v quiet -print_format json -show_format -show_streams input.mp4

Remotion 빠른 참조

캐시된 워크스페이스 설정

WORKSPACE="/tmp/remotion-workspace"
if [ ! -d "$WORKSPACE/node_modules" ]; then
  cp -r ~/project-templates/remotion-video/* "$WORKSPACE/"
  cd "$WORKSPACE" && npm install
fi

TitleCard 컴포지션

import { AbsoluteFill, spring, useCurrentFrame, useVideoConfig, Img } from 'remotion';

type Animation = 'fade' | 'slide-up' | 'slide-down' | 'zoom' | 'typewriter' | 'glitch' | 'blur-in';

export const TitleCard: React.FC<{
  text: string;
  subtitle?: string;
  bg?: string;
  fg?: string;
  accent?: string;
  animation?: Animation;
  logo?: string;
}> = ({ text, subtitle, bg = '#09090B', fg = '#FFFFFF', accent = '#7C3AED', animation = 'fade', logo }) => {
  const frame = useCurrent

…

[나머지는 번역을 위해 생략됨]

관련 스킬