유튜브 자막 추출 앱 – TXT 파일로 바로 변환 다운받기

아이콘 하나 만드는 데 며칠, 결국 유튜브 자막 추출 앱을 스스로 만든 이야기
안녕하세요, 디탑입니다! 오늘은 평소와 다른 이야기를 가져왔어요. 종목 분석이나 정책 해설 대신, 제가 콘텐츠 리서치할 때 매일같이 쓰는 도구 하나를 직접 만든 과정을 공유해보려 합니다. 바로 유튜브 영상의 자막(스크립트)을 텍스트로 추출해주는 macOS 앱인데요, 시중 확장프로그램을 쓰다가 결국 제 손으로 만들게 된 이유부터 차근차근 정리해드릴게요.

(Mac 전용)
1. 왜 굳이 직접 만들었나 — “복사 → 붙여넣기 → 저장”의 반복
유튜브 인터뷰나 강의 영상을 리서치 소재로 쓸 때, 영상을 처음부터 끝까지 다시 보기보다는 자막을 텍스트로 뽑아서 훑어보는 게 훨씬 빠릅니다. 이런 용도로 크롬 웹스토어에 있는 유튜브 스크립트 추출 확장프로그램들을 꽤 오래 써왔는데요, 대부분 기능 자체는 괜찮았습니다. 다만 두 가지가 계속 걸렸습니다.
- 잘 쓰던 확장프로그램이 어느 순간 유료 전환되는 경우가 종종 있었고
- 추출한 텍스트를 실제 파일로 저장하려면 매번 “복사 → 새 텍스트파일 만들기 → 붙여넣기 → 저장”이라는 4단계를 반복해야 했습니다
하루 이틀이면 괜찮은데, 반복 작업이 은근히 시간을 잡아먹더라고요. 그래서 결심했습니다. “이 정도면 나도 만들 수 있지 않을까?”
2. 만드는 과정 — ChatGPT와 함께 처음부터 끝까지
프로그래밍을 전문적으로 하는 게 아니라서, ChatGPT와 대화하며 Python으로 하나씩 구현했습니다. 처음엔 정말 단순했어요. yt-dlp(유튜브 자막을 가져오는 오픈소스 도구)로 한국어 자막을 다운로드하고, 시간코드 같은 불필요한 태그를 제거해서 TXT로 저장하는 정도였습니다. 여기에 Tkinter로 간단한 화면을 붙이고, PyInstaller로 macOS 앱(.app) 형태로 패키징했습니다.

그런데 여기서 끝이 아니었습니다. 실제로 써보면서 이런저런 문제들이 튀어나왔고, 하나씩 해결해나가는 과정 자체가 흥미로운 여정이었습니다.
부딪혔던 문제들
| 문제 | 원인 | 해결 |
|---|---|---|
| 단축키(⌘V 등)가 안 먹힘 | macOS의 Tk 라이브러리가 Command 조합 키를 제대로 못 읽음 | 키 감지 방식을 다르게 수정 |
| HTTP 429 (요청 제한) 오류 | 같은 영상 정보를 두 번 요청하던 로직 문제 + 유튜브 측 제한 강화 | 중복 요청 제거, 필요시 크롬 로그인 쿠키로 보조 인증 |
| “페이지를 새로고침해야 합니다” 오류 | 유튜브의 JavaScript 검증 로직 강화 | yt-dlp-ejs와 Deno(자바스크립트 실행 환경)를 앱에 포함 |
특히 자막 로직은 한 번 갈아엎었습니다. 처음엔 “한국어 없으면 언어 선택창을 띄우고 사용자가 고르게” 하는 방식이었는데, 오히려 복잡하고 오류가 잦았습니다. 그래서 아래처럼 훨씬 단순한 규칙으로 바꿨습니다.
- 실제 한국어 자막(자동번역 제외)이 있으면 → 한국어로 다운로드
- 없으면 → 영상 원본 언어 자막으로 다운로드
- 그마저 없으면 → 자막 없음 안내
복잡한 예외 처리를 계속 추가하는 대신 원칙을 단순하게 만드니, 오히려 훨씬 안정적으로 작동하기 시작했습니다.
3. 완성된 앱, 지금 이렇게 씁니다
현재 안정 버전 기준으로 이런 기능들이 들어가 있습니다.
- 유튜브 URL만 입력하면 자막 자동 다운로드
- 실제 한국어 자막 우선, 없으면 원본 언어로 자동 전환 (자동번역 자막은 제외)
- 기본 저장 폴더 지정 가능 (매번 어디에 저장할지 묻지 않아도 됨)
- 추출 완료 후 TXT 파일이 자동으로 열림
- 오류 발생 시 진단용 로그 파일 별도 기록
실제로 써보니, 확장프로그램 쓸 때 반복하던 4단계가 “URL 붙여넣기 → 클릭” 두 단계로 줄었습니다. 사소해 보이지만 여러 번 반복하는 작업이라 체감 효과가 꽤 큽니다.
재밌었던 발견 — 왜 이렇게 용량이 커졌을까
앱을 다 만들고 나서 의아했던 점이 하나 있었습니다. 제가 직접 짠 코드(거의 대부분 GPT함 ^^;;)는 29KB밖에 안 되는데, 완성된 앱은 203MB나 됐거든요. 확인해보니 새로 알게된 사실이 있습니다.
| 구성 요소 | 용량 | 비중 |
|---|---|---|
| 제가 작성한 Python 코드 | 약 29KB | 약 0.014% |
| Deno(자바스크립트 실행 환경) | 약 157MB | 약 77% |
| 나머지 실행환경(Python, Tkinter, yt-dlp 등) | 나머지 | – |
코드가 복잡해서가 아니라, 다른 컴퓨터에서도 별도 설치 없이 바로 실행되도록 Python 실행환경과 유튜브 호환성을 위한 Deno까지 통째로 앱 안에 포장했기 때문이었습니다. 별거 아닌 궁금증이었지만, “내가 만든 앱이 왜 이렇게 무거워졌지”라는 질문에 답을 찾는 과정도 나름 공부가 됐습니다.

4. 지금은 여기서 멈춰있습니다
기능은 계속 더 추가할 수 있었지만, 일부러 멈췄습니다. 실제로 며칠 더 써보면서 진짜 필요한 기능이 뭔지 확인한 뒤에, 다음 단계를 진행하기로 했거든요. 보류 중인 개선 사항은 이렇습니다.
- 여러 URL을 한 번에 처리하는 일괄 처리 기능
- 자동자막 특유의 반복 문장을 더 정교하게 제거하는 기능
- macOS·Windows 정식 배포판 제작
5. 디탑의 유튜브 자막 추출 앱 (Mac 전용)
코드를 활용해서 개선하실 분은 아래 코드 원본을 활용해주세요.
맥에서 디탑과 같이 활용하실 분들은 앱을 다운받아 바로 사용하셔도 됩니다. ZIP파일로 압축되어 있으니 참고해주세요.

유튜브 주소를 복사, 붙여넣기 후 “스크립트 추출”을 클릭하면 원하는 폴더에 TXT파일로 저장이 완료됩니다. 🔴 유튜브에서 일반요청을 차단 시 크롬의 유튜브 로그인 정보를 활용할 수 있습니다. 필요없다면 코드를 수정 후 사용해주세요.
정리하며
시중 확장프로그램이 나쁘다는 이야기가 아닙니다. 오히려 편리한 기능이 훨씬 많았어요. 다만 저에게 딱 맞는 작은 불편함 두세 가지—유료 전환 리스크, 반복되는 저장 절차—를 없애고 싶어서 직접 만들어본 경험이었습니다. AI 도구(이 경우엔 ChatGPT)와 함께라면, 전문 개발자가 아니어도 “내 워크플로우에 딱 맞는 작은 도구”를 직접 만들어볼 수 있다는 걸 실감한 과정이기도 했습니다. 콘텐츠 리서치나 자료 정리를 자주 하시는 분이라면, 비슷한 불편함을 느끼셨을지도 모르겠네요.
📌 추가 링크 확인
- 크롬 웹스토어 – 유튜브 스크립트 관련 확장프로그램 둘러보기
- yt-dlp 공식 GitHub — 이 앱의 핵심 자막 추출 엔진