NotebookLM (Google은 2026년 7월에 Gemini Notebook으로 이름을 변경했지만, 같은 제품입니다)은 긴 영상 강의를 공부하는 가장 좋은 무료 방법 중 하나입니다. YouTube 링크를 추가하면 비디오의 자막을 읽고 질문하거나, 플래시카드를 만들거나, 오디오 개요를 생성할 수 있습니다.
이 문제는 실제 강좌에서 발생합니다. Google의 도움말 페이지에는 무료 요금제에 대한 다음과 같은 제한 사항이 명시되어 있습니다:
- 노트북당 50개 소스
- 소스당 500,000 단어 (또는 업로드 파일당 200MB)
YouTube 링크 하나가 하나의 소스가 됩니다. 120개의 강의로 구성된 학기 과정이라면 세 개의 노트북이 필요하며, 그러면 전체 강좌에 걸쳐 한 가지 질문을 할 수 없게 됩니다.
해결책은 두 번째 숫자에 있습니다. 50개 소스는 적지만, 소스당 500,000 단어는 많습니다. 강의 음성 1시간 분량의 자막은 대략 8,00010,000단어이므로, 하나의 소스가 약 4555시간 분량의 스크립트를 담을 수 있습니다. 재생 목록을 하나의 텍스트 파일로 변환하면 강좌 전체가 하나의 소스가 되어 슬라이드, 논문 및 노트에 사용할 수 있는 여유 공간 49개를 남길 수 있습니다.
아래는 무료로 직접 할 수 있는 방법과 터미널을 만지고 싶지 않을 때의 단축키입니다.
필요한 것들
- Python 3
- yt-dlp (
pip install yt-dlp)
- 자막(수동 또는 자동 생성)이 있는 재생 목록. 이 방법은 자막을 읽기 때문에 오디오를 전사하지는 않습니다. 따라서 자막이 없는 비디오는 아무것도 제공하지 않습니다.
1단계: 전체 재생 목록의 자막만 다운로드하기
mkdir subs && cd subs
yt-dlp --skip-download --write-subs --write-auto-subs \
--sub-langs
- `--skip-download`는 비디오나 오디오를 가져오지 않고 자막 파일만 가져옵니다.
- `--write-subs --write-auto-subs`는 크리에이터가 제공한 캡션을 사용하고, 그렇지 않으면 YouTube의 자동 생성 캡션(auto-captions)을 사용합니다.
- `--sub-langs "en.*"`은 영어 트랙을 선택합니다. `en`을 원하는 언어 코드로 변경하세요. 만약 잘못된 언어를 얻었다면, 하나의 비디오에 대해 `yt-dlp --list-subs URL`을 실행하여 정확한 트랙 이름을 확인하십시오.
- `%(playlist_index)03d`는 각 파일 앞에 001, 002 등 접두사를 붙여 강의 순서가 유지되도록 합니다.
만약 "Sign in to confirm you're not a bot" 오류가 발생한다면, 클라우드 서버나 VPN을 사용하고 있을 가능성이 높습니다. YouTube는 많은 데이터센터 IP를 차단합니다. 일반적인 가정 연결에서 실행하고, 대규모 플레이리스트의 경우 YouTube에 과부하를 주지 않도록 `--sleep-requests 1` 옵션을 추가하십시오.
## Step 2: 자막 파일들을 하나의 깨끗한 Markdown 파일로 결합하기
원본 `.vtt` 파일에는 타이밍 라인, 포맷팅 태그가 가득하며, 자동 생성 캡션의 경우 캡션이 "롤링(roll)"하는 과정에서 모든 줄이 두세 번 반복되어 있습니다. 이 스크립트는 이러한 요소들을 모두 제거하고, 강의 순서에 따라 각 섹션을 `## heading` 아래에 유지하며, 450,000단어를 초과할 때만 새로운 파트 파일을 시작합니다 (500k 제한에 대한 안전 마진). 절대 강의를 반으로 자르지 않습니다.
`combine_subs.py`로 저장하십시오:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/env python3
"""Combine every .vtt subtitle file in a folder into one Markdown file per
~450,000 words (under Gemini Notebook / NotebookLM's 500,000-words-per-source cap).
...
python3 combine_subs.py ./subs "Intro to Algorithms"
예시 출력: wrote Intro to Algorithms.md (182,000 words)
대규모 과정의 경우 `... - part 1.md`, `... - part 2.md`와 같이 각 파일이 제한 용량 내에 포함되어 생성됩니다.
## Step 3: NotebookLM에 하나의 소스로 업로드하기
1. 노트북을 열고 **소스 추가(Add sources)**를 클릭한 다음, `.md` 파일을 업로드합니다. 만약 업로드 대화 상자가 계정에서 `.md` 파일을 인식하지 못한다면, 이름을 `.txt`로 변경하세요. 어느 쪽이든 일반 텍스트입니다.
2. 모든 강의가 자체 `## 001 - 제목` 헤딩 아래에 있기 때문에, 인용문은 올바른 강의를 가리킵니다.
3. 49개의 무료 슬롯을 코스 슬라이드, 논문 및 본인의 노트에 사용하세요.
### 전체 코스 소스로 잘 작동하는 프롬프트
- "강의 제목을 사용하여 강의별로 한 줄씩 구성된, 코스 개요(one-page outline)를 만들어 주세요."
- "동적 계획법(dynamic programming)에 대해 설명하는 강의는 무엇인가요? 각 강의에서 핵심 문장을 인용해 주세요."
- "최소한 두 개의 다른 강의의 아이디어가 필요한, 시험 유형 문제 20개를 작성해 주세요."
## 알아두면 좋은 제한 사항 (당황하지 않도록)
- **자막만 가능합니다.** 강사가 칠판에 공식을 말로 설명하지 않고 적기만 했다면, 이는 스크립트에 포함되지 않습니다. 슬라이드는 별도의 소스로 추가하세요.
- **자동 자막은 이름이나 기술 용어에서 오류를 일으킬 수 있습니다.** 인용할 내용은 반드시 확인(Spot-check)하세요.
- **타임스탬프는 단어를 절약하기 위해 이 스크립트에서 제외됩니다.** 정확한 순간으로 돌아가야 한다면, 원래의 `.vtt` 파일을 보관하거나 SRT로 내보내는 것이 좋습니다.
- **비공개, 회원 전용 또는 자막이 없는 비디오**는 어떤 자막 기반 방법으로도 작동하지 않습니다.
## 단축키 (스크립트를 실행하고 싶지 않다면)
저는 웹 도구인 [YT Transcriber](https://13-234-185-132.sslip.io/?ref=devto)를 만들었습니다. 이 도구는 브라우저에서 1단계와 2단계를 수행합니다: 재생 목록 또는 채널 URL을 붙여넣고, NotebookLM, ChatGPT 또는 Claude용으로 하나의 파일로 다운로드하며, 비디오 간에 450,000단어 이하로 자동 분할됩니다. 홈페이지에서 로그인 없이 한 개의 비디오를 테스트해 볼 수 있습니다. Google 로그인 시에는 하루에 3개의 비디오가 무료이며, 전체 재생 목록은 월 단위로 이용 가능합니다. 고지: 저는 학생인 제작자입니다. 이 도구는 위의 스크립트처럼 자막을 읽으므로 동일한 제한 사항이 적용됩니다.
무료 스크립트도 잘 작동합니다. 이 게시물의 핵심은 트릭입니다: **작은 링크 50개보다 큰 파일 하나가 훨씬 낫습니다.**
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28