Community코딩 & 개발github.com

luk036/compress-video

MP4 파일을 지각적으로 무손실 품질로 유지하며 지능적으로 프레임레이트를 낮추고 최적 코덱/CRF 설정으로 재인코딩하여 더 작은 크기로 압축합니다.

compress-video란 무엇인가요?

이 스킬은 MP4 파일의 크기를 줄이기 위해 설계된 AI 어시스턴트 도구입니다. 핵심 아이디어는 대부분의 스크린캐스트나 발표 영상이 60fps로 과도하게 인코딩되어 있다는 점에 착안하여, 프레임레이트를 30fps로 낮추고 최적의 코덱 및 CRF(Constant Rate Factor) 설정으로 재인코딩함으로써 지각적 품질 저하 없이 20~50%의 파일 크기 감소를 달성합니다. 이 도구는 Claude Code, Cursor, Codex 등의 AI 에이전트 환경에서 사용할 수 있는 Python 패키지 형태로 제공되며, 명령줄 인터페이스(CLI)와 Python API를 모두 지원합니다. 사용자는 간단한 CLI 명령어로 단일 파일을 분석하거나 압축할 수 있고, 배치 스크립트로 폴더 전체를 처리할 수도 있습니다. 압축 프로필(lossless, high, balanced, aggressive)을 선택하여 원하는 품질과 크기 사이의 균형을 조정할 수 있으며, stillimage 튜닝, 해상도 다운스케일, HEVC(h265) 코덱 등의 고급 옵션도 제공합니다. FFmpeg 및 ffprobe가 시스템에 설치되어 있어야 합니다.

지원 대상~Claude Code~Codex CLI~Cursor✓OpenCode
npx skills add https://github.com/luk036/agent-skills/tree/HEAD/skills/compress-video

Installed? Explore more 코딩 & 개발 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

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

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

문서

내 역할

MP4 파일 크기를 스마트한 기본값으로 재인코딩하여 줄입니다. 핵심 통찰: 대부분의 스크린캐스트와 발표 영상은 60fps로 과도하게 인코딩됩니다. 30fps로 낮추고 인코더를 조정하면 지각적 품질 차이 없이 20-50% 파일 크기 감소를 얻을 수 있습니다.

포함된 스크립트: @compress_video.py

사용 시점

  • 공유/업로드하기에 MP4 파일이 너무 클 때
  • 60fps로 녹화한 스크린캐스트를 절반으로 줄이고 싶을 때
  • 크기는 훨씬 작지만 "충분히 좋은" 품질이 필요할 때
  • 교육 영상, 데모, 녹화본을 일괄 압축해야 할 때

사용 방법

CLI (빠른 사용)

# 분석만 수행
python compress_video.py input.mp4 --probe-only

# 기본 압축 (고품질)
python compress_video.py input.mp4 output.mp4

# 작은 파일을 위한 공격적 압축
python compress_video.py input.mp4 -p aggressive

# 스크린캐스트(코드/EDA 도구): 60→30fps 드롭, stillimage 튜닝
python compress_video.py input.mp4 -p balanced --tune stillimage --fps 30

# 1080p로 다운스케일
python compress_video.py input.mp4 -p balanced --resolution 1920x1080

Python API

from compress_video import compress, probe

# 먼저 분석
info = probe("input.mp4")
print(f"{info['width']}x{info['height']} @ {info['fps']:.0f}fps")

# 기본값으로 압축
compress("input.mp4", "output.mp4")

# 공격적 설정으로 압축
compress("input.mp4", "output.mp4", profile="aggressive",
         fps=24, tune="stillimage")

요구 사항

  • Python 3.8+
  • ffmpeg 설치 및 PATH에 등록 (ffprobe 포함)

압축 프로필

프로필x264 CRFx265 CRF사용 사례
lossless1820아카이브, 최대 품질
high (기본값)2325지각적 무손실, 안전한 기본값
balanced2628좋은 품질, 더 작은 파일
aggressive2830작은 파일, 미미한 그라데이션 손실

주요 전략

기법일반적인 절감품질 영향
60fps → 30fps~25%스크린캐스트에서 지각 불가
H.264 CRF 23 (CRF 18에서)~20%대부분의 시청자에게 차이 없음
H.264 → H.265 (libx265)~30-40%없음 (동일 CRF)
--tune stillimage~5-10%코드/슬라이드에 더 적합
3200→1920 다운스케일~50%확대 시 선명도 저하

예제

125 MB 스크린캐스트를 30-50% 줄이기

# 빠른 기본 실행 (libx264 사용, 60→30fps 드롭)
python compress_video.py recording.mp4 recording_compressed.mp4
# 125 MB → 97 MB (-22%)

# stillimage 튜닝 사용 (코드/스크린캐스트에 더 적합)
python compress_video.py recording.mp4 -p balanced --tune stillimage --fps 30
# 125 MB → ~80 MB (-35%)

# 느린 프리셋의 HEVC
python compress_video.py recording.mp4 --codec h265 --preset slow --fps 30
# 125 MB → ~60 MB (-50%, 하지만 인코딩이 더 느림)

폴더 일괄 처리

Get-ChildItem *.mp4 | ForEach-Object {
    python compress_video.py $_.Name "$($_.BaseName)_compressed.mp4"
}

Individual skills in this repo

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

관련 스킬