📝 한줄 요약
유튜브 영상을 자동으로 요약하기 위해, URL을 통한 유튜브 스크립트를 가지고 자막 추출을 하던 중에, 자막이 없는 유튜브 영상의 자막 추출을 위해 ASR을 가지고 시도한 작업 내용입니다.
Claude Code와 함께 음성 인식(ASR) 스킬을 개발하고 3가지 엔진을 통합한 기록입니다.
🎯 이런 분들께 도움돼요
유튜브 콘텐츠를 정리/요약하는데 자막 없는 영상 때문에 막힌 분
여러 ASR 도구 비교가 필요하신 분
API와 로컬 모델의 차이를 실전에서 경험하고 싶은 분
😫 문제 상황 (Before)
AI 워크스페이스 스터디를 진행하면서 유튜브 영상들을 정리하고 있었습니다. 이미 만들어둔 youtube-content 스킬로 자막이 있는 영상은 자동으로 추출하고 요약할 수 있었는데, 문제는 자막이 없는 영상이었습니다.
유용한 내용인데 자막이 없다는 이유로 포기하기 아깝더라고요. 매번 영상을 열어서 자막 유무를 확인하고, 없으면 "자막 없음"이라고 표시하고 넘어가는 게 번거로웠습니다.
"음성 인식 기술을 활용하면 해결할 수 있지 않을까?" 하는 생각이 들었고, Claude Code와 함께 ASR(자동 음성 인식) 스킬을 만들어보기로 했습니다.
🛠️ 사용한 도구
Claude Code - Claude Sonnet 4.5 모델
Deepgram API - 음성 인식 API (무료 크레딧 $200 제공)
VibeVoice-ASR - Microsoft의 오픈소스 음성 인식 모델 (MLX-Audio)
Faster Whisper - OpenAI Whisper의 고속 버전
yt-dlp - 유튜브 오디오 다운로드 도구
uv - Python 패키지 관리자 (pip보다 10-100배 빠름)
🔧 작업 과정
ASR 스킬, 어떻게 설계할까?
처음에는 Microsoft의 VibeVoice-ASR 모델을 사용해볼 생각이었습니다. Hugging Face에서 찾은 모델인데, 화자 분리와 타임스탬프까지 지원한다고 해서 매력적으로 보였거든요.
Claude에게 이렇게 물어봤습니다:
youtube-content 라는 스킬이 있는데 자막이 있는 경우만 가능하더라고, 자막이 없는 경우에 ASR 모델을 사용해보려하는데, 이때 https://huggingface.co/microsoft/VibeVoice-ASR 를 사용해볼거야. 이때 마찬가지로 skill로 만들어서 사용하면 될까?
Claude가 제안한 아키텍처가 인상적이었습니다. ASR 기능을 별도 스킬로 분리하되, youtube-content 스킬이 자막이 없을 때 자동으로 ASR 스킬을 호출하게 하자는 거였죠. 그러면 제가 자막 유무를 확인할 필요 없이 그냥 "유튜브 요약해줘"라고만 하면 됩니다.
더 나아가 Claude는 ASR 스킬을 유튜브에만 국한하지 말고, 로컬 오디오 파일(회의 녹음, 팟캐스트 등)에도 사용 할 수 있게 범용적으로 설계하자고 제안했습니다.
로컬 모델 vs API, 어떤 걸 써야 할까?
설계는 좋은데, 막상 구현을 생각하니 걱정이 됐습니다. 음성 파일을 다운로드하고, 필요하면 분할하고, 모델 돌리고... 꽤 복잡할 것 같더라고요. 특히 긴 영상은 어떻게 처리해야 할지 막막했습니다.
ASR 기능을 만들다보면 꽤 복잡해질 것 같은데 괜찮을지, 혹은 더 좋은 다른 방법이 있을지 생각해줘. 링크나 음성파일을 input으로 받아 ASR을 통해 결과 도출까지 단계가 좀 있을것 같거든. 그리고 만약 영상 혹은 음성길이가 너무 크다면 split해서 처리해야하지 않을까도 생각이 들고
Claude가 로컬 모델의 문제점을 콕 집어줬습니다:
파일 분할 처리가 필요함
GPU 메모리 관리 복잡함
1시간 영상 처리하는데 1-2시간 소요
모델 다운로드만 1-3GB
그리고 대안으로 API 기반 ASR을 제안했습니다. OpenAI Whisper API, Deepgram API, AssemblyAI 등을 비교 분석해줬는데, 특히 Deepgram API가 눈에 들어왔습니다:
무료 크레딧 $200 (약 46,000분 처리 가능)
파일 크기 제한 없음
매우 빠른 속도
간단한 API
결정했습니다. 일단 Deepgram API로 빠르게 구현하고, 나중에 필요하면 로컬 모델 옵션을 추가하기로요.
VibeVoice 도입, 그리고 성능 이슈
Deepgram API는 잘 작동했지만, 처음 계획했던 VibeVoice-ASR도 시도해보고 싶었습니다. 무료이고, 화자 분리 기능도 매력적이었거든요.
VibeVoice-ASR 사용할 수 있는 방법 을 검색 등을 통해 최대한 찾아줘
Claude가 웹 검색을 통해 3가지 사용 방법을 찾아줬습니다:
Hugging Face transformers (직접 실행)
MLX-Audio (Apple Silicon 최적화)
SpeechBrain (통합 프레임워크)
제가 맥북을 사용하고 있어서, MLX-Audio 방식이 가장 적합해 보였습니다. Apple Silicon의 Metal 가속을 활용할 수 있으니까요.
하지만 너무 느렸습니다.
실시간 처리가 가능하다고 들었는데, 실제로는 몇 분짜리 영상 처리하는데도 엄청난 시간이 걸렸습니다. Claude가 원인을 설명해줬습니다 - 실시간 처리는 GPU가 필수이고, CPU만으로는 매우 느리다고요.
Faster Whisper까지 추가하며 완성
VibeVoice가 느리다는 걸 알게 되어, 또 다른 옵션을 추가하기로 했습니다.
Faster Whisper로도 한번 동일한 음성으로 테스트 해볼까? asr-transcribe 스킬에 추가해줘
Faster Whisper는 OpenAI Whisper보다 4-8배 빠른 버전입니다. CTranslate2 엔진을 사용하고, GPU/CPU 모두 지원하죠.
Claude가 asr-transcribe 스킬을 수정해서 3가지 엔진을 모두 선택할 수 있게 만들었습니다:
deepgram (API, 가장 빠름, 유료)
vibevoice (로컬, 느림, 무료, 화자 분리 가능)
faster-whisper (로컬, 빠름, 무료)
그리고 작업 과정에서 한 가지 더 깨달았습니다. youtube 영상 다운로드와 ASR 기능이 같은 스킬에 있으면 재사용성이 떨어진다는 점이요.
현재 asr-transcribe 스킬에대해서, youtube 영상 다운로드와 asr 기능이 같이 있어? 이부분을 스킬로 분리하는건 어떻게 생각해?
Claude도 동의했고, 스킬 책임 분리 원칙을 적용했습니다:
youtube-content: 자막 추출 전담youtube-downloader: 영상/오디오 다운로드 전담asr-transcribe: 음성 인식 전담 (범용)
이렇게 각 스킬의 역할을 명확히 분리하니, 유지보수도 쉽고 재사용성도 높아졌습니다.
✅ 결과 (After)
Before vs After
항목
Before
After
자막 없는 영상 처리
불가능
자동 처리
자막 유무 확인
수동으로 일일이 확인
자동 감지
ASR 엔진 선택
-
3가지 옵션 (API/로컬)
처리 가능 파일
유튜브 영상만
유튜브 + 로컬 오디오 파일
사용자 경험
"자막 있는 영상만 요약해줘"
"이 영상 요약해줘" (자동 처리)
결과물
생성된 스킬:
.claude/skills/asr-transcribe/- 음성 인식 스킬 (3가지 엔진 지원).claude/skills/youtube-downloader/- 유튜브 다운로드 스킬
수정된 스킬:
.claude/skills/youtube-content/- 자막 없을 때 ASR 자동 호출
사용 예시:
이제 그냥 "유튜브 요약해줘"라고만 하면
→ 자막 있으면 자막 추출
→ 자막 없으면 ASR 자동 실행
→ 요약 파일 저장 (30-collected/32-youtube/)
범용 사용:
회의 녹음 파일 전사
팟캐스트 내용 정리
강의 영상 자막 생성