유튜브 링크를 주고 "이 영상 요약해줘"라고 해보신 적 있나요. 답이 그럴듯하게 나옵니다. 그런데 영상을 직접 보면 내용이 다릅니다.
클로드는 영상 링크를 보지 못합니다. 제목과 설명, 검색에 걸린 텍스트로 그럴듯한 요약을 만들어냅니다. 문제는 그게 요약처럼 생겼다는 거예요. 틀렸다는 걸 알아채려면 영상을 직접 봐야 하는데, 그러면 애초에 시킬 이유가 없죠.
해결은 간단합니다. 클로드가 읽을 수 있는 두 가지 — 글과 그림 — 으로 바꿔주면 됩니다. 영상에서 자막을 뽑고, 화면을 일정 간격으로 잘라 타임스탬프가 박힌 이미지로 만들면, 클로드는 "몇 초에 무엇이 있었는지"까지 읽습니다.
오늘 저희가 이걸로 결론을 하나 뒤집었습니다. 그 얘기까지 하겠습니다.
돌아가는 구조
도구 세 개가 순서대로 붙습니다. 전부 무료고, API 키가 필요 없습니다.
| 단계 | 도구 | 하는 일 |
|---|---|---|
| 내려받기 | yt-dlp | 유튜브·인스타 릴스·틱톡에서 영상과 자막을 받는다 |
| 글로 | faster-whisper | 자막이 없으면 로컬에서 음성을 전사한다 (CPU, 비용 0) |
| 그림으로 | ffmpeg + Pillow | 프레임을 잘라 [MM:SS] 라벨이 붙은 격자 이미지로 묶는다 |
핵심은 마지막입니다. 프레임을 낱장으로 30개 주면 클로드가 30번 읽어야 하지만, 9칸 격자로 묶으면 4번이면 끝납니다. 두 시간짜리 영상도 시트 몇 장으로 훑을 수 있어요.
# 스킬로 쓰는 경우 — 클로드에게 링크를 주고 "이 영상 봐줘" # 직접 돌리는 경우 python watch.py "https://www.youtube.com/watch?v=..." --max-frames 30 결과 transcript.md 타임스탬프 붙은 대본 (30초 단위 문단) frames/ 000120s_02-00.jpg ← 파일명이 곧 타임스탬프 sheets/ 3x3 격자, 칸마다 [MM:SS] 라벨
이런 소식, 남들보다 먼저 받으실 분?
직접 돌려보고 되는 것만 골라 매주 보내드립니다. 광고성 하이프는 거릅니다.
읽는 순서가 정해져 있습니다
여기가 실제로 시간을 아끼는 부분입니다.
- 대본 먼저. 싸고 빠르고, 영상의 논지는 대부분 여기 있습니다.
- 그다음 컨택트 시트. 화면에만 있는 것(UI, 코드, 가격표, 대시보드)을 훑습니다.
- 낱장 프레임은 필요할 때만. 대본이 "여기 보시면"이라고 말하는데 설명이 없는 순간, 그 타임스탬프만 콕 집어 원본 해상도로 봅니다.
제목·설명·검색 결과로 요약하지 않는 게 이 도구의 전부입니다. 봐야 합니다.
실제 사례 — 이걸로 결론이 뒤집혔습니다
오늘 저희는 "클로드로 이미지를 생성할 수 있다, GPT 계정만 있으면 무료"라는 릴스를 검증하고 있었습니다. 따라 해봤는데 저희 환경에선 안 됐고, 원인 후보가 셋 남았습니다 — 계정 문제냐, 방법을 잘못 썼냐, 아니면 윈도우 쪽 버그냐.
답은 그 영상 안에 있었습니다. 다만 눈으로 보고 있으면 지나갑니다. 그래서 1초 간격으로 잘라 격자로 묶었습니다.
그리고 한 프레임에서 저장 경로가 스쳐 지나가는 걸 발견했습니다. 그 부분만 원본 해상도로 확대했습니다.
7d9e1e\exec- — 역슬래시입니다슬래시가 아니라 역슬래시. 윈도우 경로 구분자입니다. 즉 그 사람도 윈도우에서 돌리고 있었다는 뜻이고, 그 순간 "윈도우 버그" 가설이 죽었습니다. 화면에 0.5초쯤 스친 글자 하나가 후보를 하나 지운 겁니다.
이게 자막만 읽어서는 절대 안 나오는 종류의 증거입니다. 말로는 아무도 "저는 윈도우예요"라고 하지 않으니까요. 화면에만 있는 사실이 있고, 그걸 보려면 프레임을 봐야 합니다.
이럴 때 씁니다
- 경쟁사 분석 — 잘 되는 영상의 훅 첫 문장, 화면 구성, 자막 위치를 근거로 확인
- 주장 검증 — "이렇게 하면 된다"는 영상이 실제로 뭘 보여줬는지
- 튜토리얼에서 단계 추출 — 몇 분짜리 설명을 명령어 목록으로
- 내 영상 QA — 자막이 밀리지 않았는지, 화면이 비지 않았는지 프레임으로 점검
겪은 함정 두 가지
프레임 기본값으로는 놓칩니다
처음엔 기본값(30장)으로 돌렸는데, 56초짜리 영상에서 6장만 뽑혔습니다. 설정 화면이 통째로 빠졌고, 저는 못 봤다는 것도 모른 채 분석을 했습니다. 증거를 찾는 목적이면 촘촘하게 뽑아야 합니다.
python watch.py "<url>" --max-frames 56 --width 1080 # 화면의 작은 글자를 읽어야 하면 --width 를 올린다
메타데이터의 길이를 믿지 마세요
같은 영상에서 메타는 56초라고 했는데 실제 파일은 28.6초였습니다. 절반이 잘린 줄 알고 고화질 스트림을 따로 받아봤지만 역시 28.6초 — 메타가 틀린 거였죠. 확인은 파일에 직접 물어봅니다.
ffprobe -v error -show_entries format=duration -of csv=p=0 video.mp4
가져가세요 — 그대로 복붙
영상 하나를 뜯어보는 데 필요한 건 이게 전부입니다.
# 1. 설치 (한 번만) pip install -U yt-dlp faster-whisper pillow # 2. 영상 + 자막 받기 yt-dlp --write-auto-subs --sub-langs "ko,en" -o "video.%(ext)s" "<url>" # 3. 진짜 길이 확인 (메타는 틀릴 수 있다) ffprobe -v error -show_entries format=duration -of csv=p=0 video.mp4 # 4. 1초 간격 프레임 (증거를 찾을 때) ffmpeg -i video.mp4 -vf "fps=1,scale=540:-1" frames/f%02d.jpg # 5. 자막이 없으면 로컬 전사 — API 비용 0 python -c "from faster_whisper import WhisperModel; \ m=WhisperModel('base',compute_type='int8'); \ print(''.join(s.text for s in m.transcribe('video.mp4')[0]))"
프레임을 격자로 묶는 것까지 자동으로 하고 싶으면, 위 4번 뒤에 Pillow로 3×3씩 붙이고 칸마다 초를 적어주면 됩니다. 저희는 그걸 스킬로 묶어두고 링크만 던집니다.
영상은 정보 밀도가 높은데 검색도 인용도 안 되는 형식입니다. 글과 그림으로 바꿔놓으면 그때부터 다룰 수 있는 자료가 됩니다. 저희가 릴스 하나를 끝까지 검증할 수 있었던 것도, 남의 도구를 뜯어볼 수 있었던 것도 같은 이유입니다.
카드뉴스로도 정리했습니다
인스타그램에 올린 10장입니다.
이 글은 클로드 코드로 혼자 일하는 법 — 6편 정리 시리즈의 한 편입니다.