Communitygithub.com

JinxinHu/open_claude_skills

세미나, 강의, 컨퍼런스 영상(YouTube, Vimeo, Panopto, Zoom 녹화 또는 로컬 비디오 파일)에서 슬라이드를 추출하여 슬라이드 변경 시점마다 PNG 파일로 저장하고 타임스탬프를 포함한 PDF로 만듭니다.

open_claude_skills란 무엇인가요?

이 스킬은 녹화된 세미나, 강의 또는 컨퍼런스 토크 영상에서 슬라이드를 자동으로 추출하는 도구입니다. 사용자가 '이 세미나에서 슬라이드를 가져와', '이 YouTube 강연에서 그림을 추출해', '이 녹화본에서 슬라이드 PDF를 만들어', '비디오만 있고 슬라이드는 없어' 등의 요청을 할 때 사용합니다. Linux, macOS, Windows(WSL, Git Bash, PowerShell)를 지원하며, yt-dlp로 비디오를 다운로드하고 ffmpeg로 프레임을 분석하여 슬라이드 변경 시점을 감지합니다. 추출된 각 프레임은 PNG 파일로 저장되고 타임스탬프가 기록되며, LaTeX를 사용하여 슬라이드별로 시간이 표시된 PDF를 생성할 수 있습니다. 임계값 조정, 크롭 기능, 브라우저 쿠키를 통한 로그인 필요 영상 지원 등 다양한 옵션을 제공합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/JinxinHu/open_claude_skills/tree/HEAD/video-seminar-crawling

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

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

문서

세미나 영상에서 슬라이드 추출하기

scripts/ 디렉토리에는 동일한 기능을 수행하는 두 가지 형태의 도구가 있습니다:

스크립트사용 환경
scripts/extract_slides.shLinux, macOS, Git Bash 또는 Windows의 WSL
scripts/extract_slides.ps1Windows PowerShell (bash 불필요)
scripts/slides.tex스크립트가 프레임 옆에 복사하는 Beamer 템플릿

작동 방식: yt-dlp가 비디오 스트림만 다운로드합니다(오디오 없음, 최대 1080p). ffmpeg가 1프레임/초로 샘플링하고 첫 번째 프레임과 장면 전환 점수가 임계값을 초과하는 모든 프레임을 유지하므로, 유지된 각 프레임은 새 슬라이드 또는 새 빌드 단계가 됩니다. showinfo 로그는 각 프레임의 비디오 시간을 제공합니다. 출력 폴더에는 다음이 포함됩니다:

  • slide_001.png, slide_002.png, ...: 슬라이드 변경당 하나씩
  • timestamps.txt: 각 슬라이드의 비디오 시간(초 단위)
  • frame_list.tex 및 slides.tex: pdflatex slides.tex 실행 시 각 슬라이드 아래에 h:mm:ss 시간이 표시된 페이지가 생성됩니다

단계

  1. 도구 확인. ffmpeg -version 및 yt-dlp --version을 실행합니다. 하나라도 없으면 설치(아래 참조)하거나 사용자에게 설치 방법을 알려줍니다. 로컬 파일의 경우 yt-dlp가 필요하지 않습니다.

  2. 플랫폼에 맞는 스크립트 선택. Windows에서는 사용자가 Git Bash나 WSL을 사용 중인 것이 명확하지 않은 한 PowerShell 스크립트를 사용합니다.

  3. 스크립트 실행 사용자가 제공한 URL 또는 파일에 대해, 토크 이름을 딴 폴더(예: -o speaker_topic_frames)에 실행하며, 스킬 폴더 내부가 아닌 곳에 생성합니다.

    bash scripts/extract_slides.sh -u "https://www.youtube.com/watch?v=ID" -o talk_frames
    bash scripts/extract_slides.sh -i "recording.mp4" -o talk_frames
    
    powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -Url "https://www.youtube.com/watch?v=ID" -OutDir talk_frames
    powershell -ExecutionPolicy Bypass -File scripts\extract_slides.ps1 -InputFile "C:\path\to\recording.mp4" -OutDir talk_frames
    

    -ExecutionPolicy Bypass는 해당 실행에 한해 Windows의 기본 스크립트 차단을 우회합니다.

  4. 프레임 확인 후 보고. 몇 개의 PNG를 열어(처음, 중간, 마지막) 다음을 확인합니다:

    • 슬라이드 옆의 웹캠 또는 발표자 보기: 발표자의 움직임이 잘못된 슬라이드 변경을 유발합니다. 한 프레임에서 슬라이드 영역을 찾고 크롭 옵션으로 다시 실행합니다. -c W:H:X:Y / -Crop W:H:X:Y (ffmpeg 크롭 문법: 너비, 높이, 그 다음 왼쪽 상단 모서리).
    • 프레임이 너무 적음 (빌드 단계나 작은 변경 누락): 임계값을 낮춰 다시 실행합니다. -t 0.05 / -Threshold 0.05.
    • 프레임이 너무 많음 (비디오, 애니메이션, 카메라 노이즈): 임계값을 0.2-0.3으로 높이거나 크롭합니다.
    • 중복: 추가 PNG와 frame_list.tex의 해당 줄을 삭제합니다.
  5. PDF 생성 사용자가 원하는 경우: 출력 폴더로 cd한 후 pdflatex slides.tex (또는 latexmk -pdf slides.tex)를 실행합니다.

  6. 보고 프레임 수, 출력 폴더, PDF, 그리고 사용자가 처리해야 할 사항(예: 의도적으로 유지한 중복 프레임 등)을 알려줍니다.

옵션

bashPowerShell의미기본값
-u URL-Url URL다운로드할 비디오(yt-dlp가 지원하는 모든 사이트)
-i FILE-InputFile FILE다운로드 대신 로컬 비디오 사용
-o DIR-OutDir DIR출력 폴더video_frames
-t X-Threshold X장면 전환 임계값, 0-10.10
-c W:H:X:Y-Crop W:H:X:Y먼저 슬라이드 영역으로 크롭없음
-b NAME-Browser NAME이 브라우저의 로그인 쿠키 사용 (chrome, firefox, edge, ...)없음

도구 설치

  • Windows: winget install --id yt-dlp.yt-dlp 및 winget install --id Gyan.FFmpeg 실행 후 PowerShell을 닫고 다시 열어야 인식됩니다.
  • macOS: brew install yt-dlp ffmpeg
  • Linux: sudo apt install ffmpeg (또는 배포판에 해당하는 명령) 및 pip install -U yt-dlp
  • LaTeX (PDF에만 필요): TeX Live 또는 MiKTeX. MiKTeX의 latexmk는 Perl이 필요하며, 일반 pdflatex는 필요하지 않습니다.

문제 해결

  • 로그인이 필요한 녹화 (Panopto, Zoom 클라우드, 대학 포털): -b chrome / -Browser chrome (또는 사용자가 로그인한 브라우저)를 전달합니다. 그래도 yt-dlp가 가져올 수 없으면 사용자에게 비디오를 다운로드하여 -i를 사용하도록 요청합니다.
  • Git Bash에서 $'\r': command not found 또는 pipefail: invalid option name 오류: .sh 파일의 줄 끝이 Windows 형식입니다. sed -i 's/\r$//' scripts/extract_slides.sh를 한 번 실행합니다.
  • YouTube에서 yt-dlp 오류 ("Sign in to confirm", 형식 오류): 먼저 업데이트합니다. yt-dlp -U 또는 pip install -U yt-dlp로 대부분 해결됩니다.
  • 비디오 호스트에 네트워크 접근 불가 (샌드박스 또는 클라우드 세션): 그 사실을 알리고 사용자에게 자신의 머신에서 실행할 명령어를 제공합니다.

사용자가 접근할 수 있는 녹화만 가져오고, 토크의 라이선스가 달리 명시하지 않는 한 사용자의 메모와 학습 목적으로만 프레임을 보관하십시오.

관련 스킬