Communitygithub.com

Pugnola/비디오-요약-스킬

비디오 링크(YouTube 및 yt-dlp 지원 사이트)에서 자막을 가져와 모든 주요 주제를 다루는 상세하면서도 간결한 요약을 생성합니다. 사용자가 비디오 URL과 함께 요약, 분석을 요청하거나, 이전에 요약한 비디오에 대해 질문할 때 사용합니다.

비디오-요약-스킬란 무엇인가요?

이 스킬은 AI 에이전트(예: Claude Code, Cursor, Codex)가 비디오 링크에서 자막을 가져와 구조화된 상세 요약을 생성할 수 있도록 지원합니다. YouTube, Vimeo 등 yt-dlp로 지원되는 모든 사이트에서 작동하며, 자막이 없는 경우 Whisper를 통한 로컬 오디오 전사도 지원합니다. 주요 기능은 다음과 같습니다: 단일/다중 비디오 및 재생목록 처리, 타임스탬프가 포함된 비디오 정보 추출 및 자막 가져오기, 4-8개의 주요 주제로 구성된 상세 요약 자동 작성(개요, 각 주제 요약, 결론), 요약 파일을 ~/VideoSummaries 디렉토리에 로컬로 저장하여 추후 검색 가능하게 합니다. 또한 이전에 요약한 비디오에 대해 질문할 경우(예: "지난주에 요약한 비디오에서 X에 대해 뭐라고 했지?") 사용자의 질문 키워드로 로컬 아카이브를 검색하고(grep) 관련 요약 및 원본 자막을 찾아 인용과 함께 답변합니다. 시각적 분석 모드에서는 비디오에서 주요 장면의 프레임을 추출하여 이미지를 분석하고 요약에 시각적 분석 섹션을 추가합니다. 웹 검색이나 외부 API 없이 완전히 오프라인에서 작동하며, 로컬 캐시를 통해 이미 가져온 비디오는 즉시 처리할 수 있습니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add Pugnola/video-summary-skill

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

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

미리보기

스킬 README에서

문서

상세 비디오 요약

사용자가 제공한 비디오 링크: $ARGUMENTS

0단계 — 입력 유형 확인

  • 링크 없이 과거 비디오에 대한 질문 → 하단의 "아카이브 질의" 섹션으로 이동하고, 새 자막을 가져오지 마십시오.

  • 단일 비디오 링크 → 1단계로 바로 진행합니다.

  • 여러 비디오 링크 — 각 비디오를 1-3단계 순서대로 처리합니다. 각 비디오는 동일한 형식의 전체 요약을 가지며, ---로 구분되고 각각 별도의 파일로 저장됩니다. 마지막에 비디오 간의 공통점/차이점에 대한 1-2문장의 노트를 추가할 수 있습니다(보고서 형식은 안 됩니다).

  • 재생목록 링크(URL에 /playlist?list=가 포함되고 v=가 없는 경우) → 먼저 목록을 가져옵니다:

    bash ~/.claude/skills/video-summary/fetch_transcript.sh --list "<PLAYLIST_URL>"
    

    각 줄은 url | title | duration 형식입니다.

    • 5개 이하 비디오: 모두 순서대로 처리합니다(여러 링크와 동일).
    • 5개 초과: 먼저 사용자에게 비디오 개수와 제목 목록을 보여주고, 전체를 요약할지, 처음 N개만 할지, 또는 선택할지 물어보십시오. 확인 없이 처리를 시작하지 마십시오.
  • 혼합 비디오 + 재생목록 URL(watch?v=...&list=...) → 해당 단일 비디오만 요약하고, 요약 끝에 한 문장으로 링크가 재생목록에 속해 있으며 나머지도 요약할 수 있다고 언급하십시오.

1단계 — 자막 가져오기

다음을 실행합니다:

bash ~/.claude/skills/video-summary/fetch_transcript.sh "<VIDEO_URL>"

스크립트는 다음을 출력합니다:

  • === VIDEO INFO === — 제목, 채널, 길이, 날짜
  • === CHAPTERS === — 업로더가 정의한 경우 타임스탬프 목록(섹션 없으면 생략)
  • === TRANSCRIPT === — 정리된 타임스탬프 자막

참고 사항:

  • 이전에 가져온 비디오는 ~/VideoSummaries/transcripts/<video-id>.txt 아카이브에서 즉시 읽어옵니다((Transcript read from archive: ...) 줄이 표시됨) — 인터넷이 필요 없습니다.
  • 자막이 매우 긴 경우(스크립트 출력이 잘릴 수 있음) 출력을 스크래치패드 파일로 리디렉션하고 청크로 읽으십시오 — 아무것도 건너뛰지 마십시오.
  • 자막이 없는 비디오의 경우, whisper가 설치되어 있으면 스크립트가 오디오를 다운로드하여 로컬로 전사합니다 — 몇 분이 걸릴 수 있으므로 긴 타임아웃(600000ms)으로 명령을 실행하십시오. stderr의 "(No subtitles — ... whisper ...)" 줄이 이 경로를 나타냅니다.
  • "ERROR: no subtitles" + "WHISPER_SUGGESTION"이 반환되면: 사용자에게 비디오에 자막이 없으며 whisper를 설치하면(오류 메시지의 설치 명령을 전달) 요약할 수 있다고 알리십시오. 자막 없이 분석을 절대 만들어내지 마십시오.
  • "ERROR: could not fetch video info" + "COOKIE_SUGGESTION"이 반환되면: 직접 쿠키로 재시도하지 말고 — 사용자에게 YouTube가 요청을 차단하고 있다고 알리고 브라우저 쿠키로 재시도할지 물어보십시오. 승인하면 COOKIES=1 환경 변수로 동일한 명령을 다시 실행하십시오(macOS 키체인 권한 프롬프트가 나타날 수 있음).

2단계 — 상세 요약 작성

목표는 상세 요약입니다: 비디오를 보지 않은 사람이 모든 주요 주제, 논쟁, 핵심 숫자를 배울 수 있어야 합니다 — 그러나 자막을 그대로 옮긴 것이 아닙니다. 주요 주제를 건너뛰지 말고; 각 주제 내의 모든 문장이나 예시를 전달하지 마십시오.

대상 길이: 15분 비디오의 경우 약 300-450단어; 더 긴 비디오의 경우 비례하여 늘리되 한 페이지(~700단어)를 초과하지 마십시오.

언어: 항상 사용자가 사용하는 언어로 요약을 작성하십시오(비디오의 언어와 관계없이). 불명확한 경우 비디오의 언어를 사용하십시오.

구조:

# <비디오 제목>
**채널:** ... · **길이:** ... · **날짜:** ...

## 개요
비디오의 주제와 핵심 메시지(2-3문장).

## 주요 주제
비디오의 주요 주제당 하나의 불릿(일반적으로 4-8개):

- **[MM:SS] 주제 제목** — 해당 주제의 핵심을 2-4문장으로: 주요 아이디어, 중요한 숫자/예시, 도달한 결론.

섹션 제목: 스크립트 출력에 `=== CHAPTERS ===`가 있으면 해당 챕터와 타임스탬프로 불릿을 구성합니다(제목을 출력 언어로 번역하고, 인트로/스폰서 같은 내용 없는 챕터는 건너뛰며, 매우 짧은 연속 챕터는 하나의 불릿으로 병합). CHAPTERS가 없으면 자막에서 주제 전환을 직접 식별하십시오.

## 결론
발표자의 최종 요점과 시청자를 위한 권장 행동(2-4문장). 자체 의견/주의사항이 있으면 맨 끝에 한 문장으로 명확히 구분하여 추가하십시오.

규칙:

  • 인트로, 구독 요청, 스폰서 읽기, 발표는 절대 포함하지 마십시오.
  • 자막의 [MM:SS] 마커에서 타임스탬프를 가져오십시오; 절대 만들어내지 마십시오.
  • 클릭 가능한 타임스탬프: YouTube 비디오의 경우 모든 [MM:SS] 스탬프를 해당 비디오 초로 연결되는 링크로 변환하십시오: [06:09](https://youtu.be/<VIDEO_ID>?t=369) (t = 총 초). 채팅 출력과 저장된 파일 모두에 적용하십시오. YouTube가 아닌 소스의 경우 스탬프를 일반 텍스트로 남기고; 링크를 만들어내지 마십시오.
  • 자막에 없는 정보는 추가하지 마십시오.
  • 정말 인상적인 인용문이 1-2개 있으면 관련 불릿 안에 포함하십시오; 별도 섹션을 열지 마십시오.
  • 사용자가 "더 깊이" 또는 특정 부분에 대해 묻는 경우, 자막이 컨텍스트에 있습니다 — 원하는 만큼 해당 부분을 확장하십시오.
  • 시각적 제안: 자막에 3개 이상의 시각적 참조("이 차트", "저 표", "화면에", "여기서 보듯이" 등)가 있으면 요약 끝에 한 줄을 추가하십시오: "📊 이 비디오는 시각적 요소가 많아 보입니다 — 원하시면 차트/스크린샷도 분석해 드릴 수 있습니다." 사용자가 승인하면 시각적 분석 모드로 전환하십시오. 시각적 참조가 없으면 노트를 추가하지 마십시오.

3단계 — 요약을 아카이브에 저장

채팅 메시지가 주요 결과물입니다: 항상 대화에서 전체 요약을 먼저 출력하십시오. 아카이브 파일은 추가 사본일 뿐입니다 — 채팅 출력을 건너뛰고 파일만 쓰지 말고, 요약을 파일 포인터로 대체하지 마십시오.

채팅에 요약을 출력한 후, Write 도구로 동일한 내용을 다음 경로에 저장하십시오:

~/VideoSummaries/<YYYY-MM-DD>-<video-title-kebab-case>.md

(날짜 = 오늘. 제목을 소문자, ASCII, 하이픈 구분으로 줄이십시오; 최대 60자.)

파일 맨 위에 이 메타데이터 블록을 추가하십시오:

> **비디오:** <URL>
> **요약 날짜:** YYYY-MM-DD

최종 메시지에서 사용자에게 파일 경로를 한 줄로 알리십시오.

시각적 분석 모드 — 사용자가 승인하거나 처음에 요청한 경우

사용자가 시각적 분석을 승인하거나(또는 "차트 포함"과 같이 처음에 요청한 경우) 자막 요약 위에 다음을 수행하십시오:

  1. 순간 선택: 자막에서 시각적 참조 순간의 초를 수집합니다(발표자가 "이것 보세요", "이 차트"라고 말하는 부분). 명확한 순간이 없으면 auto(장면 전환 감지)를 사용하십시오.

  2. 프레임 추출(시간이 걸릴 수 있음 — 600000ms 타임아웃 사용):

    bash ~/.claude/skills/video-summary/extract_frames.sh "<URL>" "<scratchpad>/frames" "369,430,585"
    

    마지막 인수는 초 목록입니다. auto의 경우 생략합니다. 스크립트는 프레임 파일 경로를 출력합니다(frame_006-09.jpg = 06:09). 최대 12개의 프레임이 추출됩니다.

  3. Read로 프레임을 보고 해석하십시오.

  4. "## 시각적 분석" 섹션 작성: 각 중요한 프레임에 대해 클릭 가능한 타임스탬프 + 이미지가 보여주는 내용 + 그 순간 발표자의 주장과 어떻게 연결되는지. 정보가 없는 프레임(얼굴만, 인트로 화면)은 건너뜁니다.

  5. 저장된 요약 파일에도 섹션을 추가하십시오(Edit 사용).

  6. 스크립트가 "ffmpeg is not installed"라고 말하면 brew install ffmpeg 제안을 전달하고; 장면 전환이 발견되지 않았다고 하면 사용자에게 비디오가 시각적으로 정적이라는 것을 알리십시오(분석할 내용 없음).

  7. 스크립트가 "could not download" + "COOKIE_SUGGESTION"이라고 말하면: 직접 쿠키로 재시도하지 말고 — 사용자에게 YouTube가 다운로드를 차단하고 있다고 알리고 브라우저 쿠키로 재시도할지 물어보십시오. 승인하면 COOKIES=1 환경 변수로 동일한 명령을 다시 실행하십시오(macOS 키체인 권한 프롬프트가 나타날 수 있음).

아카이브 질의 — 링크 없이 과거 비디오에 대한 질문

사용자가 URL 없이 이전에 요약한 비디오에 대해 물을 때("지난주에 요약한 비디오에서 X에 대해 뭐라고 했지?", "내 아카이브에 Y에 대해 뭐가 있어?", "지난달 비디오들의 공통 주제는 뭐였지?"):

  1. 광범위 스캔: ~/VideoSummaries/*.md 요약 파일에서 키워드를 grep하십시오. 사용자 언어와 함께 영어 동의어도 시도하십시오(요약은 사용자 언어를 따르지만 인용문/용어는 비디오 원래 언어일 수 있음).
  2. 상세 탐색: 일치하는 요약을 읽으십시오. 요약만으로 충분하지 않은 경우(정확한 표현, 컨텍스트, 또는 요약에 포함되지 않은 세부 사항), 동일한 비디오의 원본 자막으로 이동하십시오: 요약 메타데이터 블록의 URL에서 비디오 ID를 가져와 ~/VideoSummaries/transcripts/<video-id>.txt를 읽거나 grep하십시오.
  3. 인용 답변: 모든 사실을 출처와 함께 제공하십시오 — 비디오 제목, 요약 날짜, 타임스탬프. 여기서도 타임스탬프를 클릭 가능하게 만드십시오(비디오 URL은 요약 메타데이터 블록에 있음). 기억이나 추측으로 공백을 채우지 마십시오; 아카이브에 없으면 명시적으로 그렇게 말하십시오.
  4. 날짜 필터: 파일 이름은 YYYY-MM-DD-title.md 형식을 따릅니다 — "지난달"과 같은 범위는 파일 이름으로 필터링하십시오.
  5. 이 모드는 완전히 로컬입니다: YouTube 없음, 인터넷 없음.

관련 스킬