📺 YT_2md_2NotebookLM — Bulk Import YouTube Video → into Structured Markdown with transcript, description, sorted by date as sources of NotebookLM
Generate Markdown Content from YouTube Channels: Bulk Auto-import transcripts and descriptions and auto-naming .md-files with creation date, channel name as file titles
Перетворює список YouTube-посилань на впорядковану бібліотеку
.mdфайлів, зі структурою, зручною для ШІ. Кожен файл - автоматично наповнюється транскрипцією та описом відео, зберігається під назвою, що містить дату публікації, автора та назву відео - для легкої навігації та прочитання в Google NotebookLM.
"Коли я хочу додати в NotebookLM десятки відео з YouTube, я використовую цей скрипт, щоб масово імпортувати їхні транскрипти з описом, тегами та ыншими структурованими даними. Всі вони зберігаються у файли markdown .md з автоматично доданою в назву датою публікації відео та ім'ям автора."
Ситуація: У вас є список важливих YouTube-відео — лекції, інтерв'ю, подкасти — і ви хочете занурити їх у свій робочий простір у NotebookLM, Obsidian або будь-якій PKM-системі.
Проблема: Копіювати транскрипти вручну, шукати дату публікації, форматувати текст — це рутинна робота для ші-агента. Аналізувати ідеї — це робота для людини.
Цей скрипт повертає вам ваш час.
Результат: Кожне відео → окремий .md файл із повною структурою: метадані, опис, транскрипт і заготовки для ваших нотаток — все готово до завантаження в NotebookLM як джерело (Source). А в заголовок кожного - автоматично додається дата створення відео та назва каналу.
| Функція | Що це дає вам |
|---|---|
| 📦 Zero-Effort Bulk Processing | Додайте 50+ посилань у текстовий файл — отримайте готову базу знань за хвилини, поки п'єте каву |
| 📂 Chronological Intelligence | Файли іменуються YYYY-MM-DD_ Channel_ Title — бібліотека сортується сама, утворюючи чітку часову лінію |
| 🧠 AI-Optimized Content | Скрипт "лікує" розірвані рядки транскрипту, створюючи монолітні абзаци, які AI розуміє значно глибше |
| 🏗️ Professional Template | Кожен файл: Метадані → Опис → Транскрипт → Місце для нотаток. Готово до роботи "з коробки" |
| 🌍 Polyglot Support | Інтелектуальний пошук субтитрів: UA → RU → EN з автоматичним перекладом |
| 🛡️ Anti-Block Protection | Підтримка cookies.txt для обходу помилки "Too Many Requests" (429) |
| 🧹 Auto-Sanitization | Скрипт очищує список оброблених посилань — жодного дублювання роботи |
- Python: 3.8 або новіший
- pip (входить до стандартної установки Python)
- Deno: deno.land (необхідний для розв'язання JavaScript-завдань YouTube)
- FFmpeg: ffmpeg.org (необхідний для стабільної роботи
yt-dlpз медіа-даними)
git clone https://github.com/YOUR_USERNAME/yt2notebooklm.git
cd yt2notebooklmАбо просто завантажте файл yt_links_to_titles_with_dates_for_notebooklm.py вручну.
pip install yt-dlp requestsДля обходу сучасного захисту YouTube («n-challenge») скрипту потрібен Deno та FFmpeg. Виконайте в PowerShell:
# Встановлення Deno
winget install --id DenoLand.Deno -e --source winget
# Встановлення FFmpeg
winget install --id Gyan.FFmpeg -e --source wingetВажливо: Після встановлення перезапустіть термінал або Cursor, щоб зміни набрали чинності.
Відкрийте файл скрипта і знайдіть розділ # --- НАЛАШТУВАННЯ --- в кінці файлу:
# --- НАЛАШТУВАННЯ ---
input_file = r"D:\YOUR_PATH\links_to_process.txt" # файл з посиланнями
output_folder = r"D:\YOUR_PATH\My_NotebookLM" # папка для збереження .md
cookie_file = r"D:\YOUR_PATH\youtube_cookies.txt" # (опційно) файл кук для обходу блокуваньЗамініть шляхи на свої. Папка для виводу буде створена автоматично, якщо не існує.
your-folder/
├── yt_links_to_titles_with_dates_for_notebooklm.py # основний скрипт
├── links_to_process.txt # сюди вставляєте YouTube URL
├── README.md
│
└── My_NotebookLM/ # папка з результатами (генерується)
├── 2024-11-15_ ChannelName_ Video Title.md
├── 2025-03-01_ AnotherChannel_ Another Video.md
└── ...
Скрипт можна запустити в будь-якому зручному середовищі:
python yt_links_to_md_transcript_with_dates.pypython3 yt_links_to_md_transcript_with_dates.py- Відкрийте файл скрипта
- Натисніть кнопку ▶ Run у верхньому правому куті
- Або викличте вбудований термінал (
Ctrl+``) і виконайте команду вище
%run yt_links_to_titles_with_dates_for_notebooklm.py
⚠️ У Colab потрібно спочатку завантажитиlinks_to_process.txtі встановити бібліотеки через!pip install yt-dlp youtube-transcript-api
Крок 1. Відкрийте файл links_to_process.txt і вставте посилання на відео — по одному на рядок:
https://www.youtube.com/watch?v=dQw4w9WgXcQ
https://youtu.be/abc123def456
https://www.youtube.com/watch?v=xyz789
Крок 2. Запустіть скрипт одним зі способів вище.
Крок 3. Спостерігайте за прогресом у консолі:
[START] Обробка 3 відео (включаючи авто-субтитри)...
[1/3] Обробка: https://www.youtube.com/watch?v=dQw4w9WgXcQ
- Канал: Rick Astley
- Назва: Never Gonna Give You Up
[DONE] Збережено: 1987-10-25_ Rick Astley_ Never Gonna Give You Up.md
...
--- ПІДСУМОК ---
Успішно оброблено: 3
Не вдалося: 0
Крок 4. Завантажте згенеровані .md файли у Google NotebookLM як джерела (Sources → Upload).
Проблема: YouTube часто блокує автоматизовані запити (особливо при інтенсивному використанні), видаючи помилку HTTP Error 429: Too Many Requests.
Рішення: Скрипт підтримує авторизацію через Cookies. Це дозволяє скрипту виглядати для YouTube як звичайний сеанс браузера.
- Встановіть розширення для браузера (наприклад, Get cookies.txt LOCALLY).
- Зайдіть на YouTube під своїм акаунтом.
- Експортуйте куки: натисніть на розширення і збережіть файл під назвою
youtube_cookies.txt. - Розмістіть файл у папці зі скриптом (або вкажіть шлях у налаштуваннях).
Tip
Це не обов'язково. Скрипт працюватиме анонімно, якщо файлу немає. Використовуйте куки, тільки якщо бачите помилку 429 або якщо відео має вікові обмеження.
Кожен .md файл містить такі розділи:
# 2025-03-15_ ChannelName_ Video Title
---
URL: https://youtube.com/...
tags:
about:
date: 2025-03-15
---
**TITLE**:
## Повна назва відео ← авто
**URL**:
https://youtube.com/... ← авто
**HOOK**:
← для вашого рукописного хуку
**DESCRIPTION**:
(опис під відео з YouTube) ← авто
=====
**TIMESTAMPS**:
← вручну або з відео
=====
**BRIEF/SUMMARY**:
##
← ваш короткий конспект
=====
**TRANSCRIPT**:
(повний текст субтитрів) ← авто
=====
**BEST COMMENTS**:
← вручну
-------------------------------------------
**TRANSCRIPT WITH TIMESTAMPS**:
← вручну, для створення timestamps чи часових міток для відсилань, зносок в нотатках NotebookLM
-------------------------------------------
# \дата_ [#тег] СУПРОВІДНА СТАТТЯ - тема/
**URL**: ← вручну (якщо є супровідна стаття/пост)
**TITLE**: ##
**HOOK/TAGS**:
**DESCRIPTION**:
**TEXT**:
## МІЙ опис суті, МОЇ НОТАТКИ/SUMMARY
-------------------------------------------| Секція | Заповнення |
|---|---|
| TITLE, URL, DESCRIPTION, TRANSCRIPT | ✅ Автоматично (yt-dlp + субтитри) |
| date, channel у front-matter | ✅ Автоматично |
| tags, about | ✏️ Вручну |
| HOOK, TIMESTAMPS, BRIEF/SUMMARY | ✏️ Вручну |
| BEST COMMENTS, TRANSCRIPT WITH TIMESTAMPS | ✏️ Вручну |
| СУПРОВІДНА СТАТТЯ | ✏️ Вручну |
1. Ручні субтитри: UA → RU → EN
↓ не знайдено
2. Авто-субтитри: UA → RU → EN
↓ не знайдено
3. Переклад будь-якої доступної доріжки на UA
↓ недоступно
4. Будь-яка доступна доріжка без перекладу
↓ нічого немає
5. [ERROR] — файл не створюється, URL залишається у списку
При тимчасових мережевих помилках (IpBlocked, RequestBlocked) скрипт автоматично робить до 4 спроб з паузами.
Q: Я отримую Error 429: Too Many Requests. Що це?
A: YouTube тимчасово обмежив запити з вашої IP-адреси. Це часто трапляється при обробці великої кількості відео.
- Рішення 1: Використовуйте Cookies (див. розділ вище).
- Рішення 2: Зачекайте 1 годину. YouTube зазвичай автоматично знімає блокування після періоду спокою.
- Рішення 3: Скрипт автоматично використовує Safe Mode (паузи 12-28с), не вимикайте його.
Q: Я отримав [ERROR] Субтитри недоступні. Що це означає?
A: У цього відео повністю вимкнені субтитри (включаючи авто-генерацію). Файл не буде створено, а URL залишиться у links_to_process.txt для повторної спроби.
Q: Чи підтримуються плейлисти або канали цілком?
A: Наразі скрипт обробляє лише окремі URL. Підтримку плейлистів заплановано.
Q: Як завантажити файли в NotebookLM?
A: Відкрийте notebooklm.google.com → створіть або відкрийте Notebook → Sources → + Add source → Upload → виберіть .md файли.
Q: Чи безпечно вставляти пасти з Google Drive у input_file?
A: Так, шлях до Google Drive (наприклад, D:\G.DRIVE\...) працює як звичайна папка, якщо Drive синхронізовано.
Q: Скрипт не знаходить python у PowerShell.
A: Спробуйте py, python3 або переконайтеся, що Python додано до PATH під час встановлення (галочка "Add Python to PATH" в інсталяторі).
Q: Чи підтримуються Shorts?
A: YouTube Shorts підтримуються — вони є звичайними відео з коротким URL. Однак у більшості Shorts субтитри недоступні.
- Якщо YouTube тимчасово блокує IP (наприклад, із VPN або хмарних серверів), буде помилка
IpBlocked. Зачекайте кілька хвилин і запустіть знову. - Скрипт не підтримує відео з обмеженим доступом (вікові обмеження, приватні відео, відео тільки для підписників).
ffmpegне потрібен — скрипт не завантажує медіафайли.
- Підтримка URL плейлистів і каналів
- Опція вибору мови пошуку субтитрів через аргументи CLI
- Генерація
BRIEF/SUMMARYчерез Gemini / OpenAI API - Підтримка виводу у форматах
.txtта.json - Docker-контейнер для запуску без налаштування середовища
Pull requests вітаються! Для великих змін, будь ласка, спочатку відкрийте Issue, щоб обговорити запропонований напрям.
- Fork репозиторію
- Створіть гілку (
git checkout -b feature/my-feature) - Зробіть commit (
git commit -m 'Add my feature') - Push у гілку (
git push origin feature/my-feature) - Відкрийте Pull Request
Цей проект розповсюджується під ліцензією MIT. Використовуйте, модифікуйте та ділітеся вільно — з посиланням на оригінал.
Зроблено з ☕ і бажанням витрачати час на ідеї, а не на рутину.
Якщо скрипт зекономив вам час — ⭐ зірочка на GitHub буде найкращою подякою.