YouTube videolarını Claude Code'a "izlettiren" bir pipeline. Transcript + ekran görüntülerini birleştirerek bir storyboard grid oluşturur, Claude bunu Vision LLM ile analiz eder ve bilgileri docs/wiki/ altında Obsidian formatında saklar.
YouTube URL
↓
Transcript İndir (VTT/SRT → Groq Whisper fallback)
↓
NLP Analizi → Akıllı Timestamp Seçimi
↓
FFmpeg → Sadece O Anların Frame'leri
↓
Storyboard Grid (JPEG)
↓
Claude (Vision LLM) → Analiz
↓
docs/wiki/ → Obsidian Knowledge Base
Sadece transcript kullanmak yeterli değil — önemli bilgilerin büyük kısmı ekranda gösterilir, sesle anlatılmaz. Bu pipeline transcript'i NLP ile okuyarak nerede ekran görüntüsü alınacağını öğrenir; sabit aralıklı frame extraction yerine semantik olarak değerli anları seçer.
Gereksinimler: Python 3.11+, ffmpeg, Claude Code
git clone <https://github.com/oguzcankaraman/Watch_Youtube_Skill>
cd YouTubepython3.11 -m venv .venv
source .venv/bin/activate # macOS/Linux
# .venv\Scripts\activate # Windowspip install -r requirements.txt
pip install -e .python -m spacy download en_core_web_smbrew install ffmpeg # macOS
sudo apt install ffmpeg # Ubuntu/Debian
# Windows: https://ffmpeg.org/download.htmlYouTube altyazısı olmayan videolar için Whisper fallback:
export GROQ_API_KEY="gsk_..."Groq API key al — ücretsiz tier yeterli.
source .venv/bin/activate
watch-youtube "https://www.youtube.com/watch?v=VIDEO_ID" \
--output-dir ./output \
--max-frames 20 \
--verboseStoryboard JPEG'leri output/VIDEO_ID/ altına kaydedilir.
Claude Code kuruluysa projeyi açın ve bir YouTube URL paylaşın. CLAUDE.md sayesinde Claude otomatik olarak watch-youtube skill'ini devreye alır, videoyu analiz eder ve docs/wiki/ altına yazar.
# Claude Code'a şunu yapıştırın:
https://www.youtube.com/watch?v=VIDEO_ID
| Seçenek | Varsayılan | Açıklama |
|---|---|---|
--output-dir / -o |
. |
Storyboard JPEG'lerinin kaydedileceği klasör |
--max-frames / -n |
30 |
Maksimum frame sayısı |
--jpeg-quality / -q |
85 |
JPEG kalitesi (1–95) |
--silence-gap / -g |
5.0 |
Sessizlik eşiği (saniye) |
--groq-api-key / -k |
env GROQ_API_KEY |
Whisper fallback için Groq key |
--keep-temp |
kapalı | Geçici video/frame dosyalarını sakla |
--no-learn |
kapalı | Bu çalıştırmada keyword öğrenmesini atla |
--verbose / -v |
kapalı | Debug log'larını göster |
watch_youtube/
__init__.py # Veri modelleri (dataclass'lar)
downloader.py # yt-dlp ile transcript + video indirme
analyzer.py # NLP timestamp seçimi + self-learning
extractor.py # ffmpeg frame extraction
compiler.py # Pillow storyboard grid
main.py # CLI entry point
.claude/skills/
watch-youtube/ # Claude Code skill talimatları
wiki-schema/ # Wiki yazma kuralları
docs/wiki/
Index.md # Ana harita
Videos.md # Analiz edilmiş videoların kayıtları
*.md # Konu bazlı wiki sayfaları
data/
keyword_store.json # Self-learning keyword veritabanı
output/
VIDEO_ID/
storyboard_page_001.jpg
storyboard_page_002.jpg
...
İki kural birlikte çalışır:
Kural A — Keyword eşleşmesi: Transcript'te "look at this", "here we have", "diagram", "terminal" gibi konuşmacının ekrana işaret ettiği ifadeler tespit edilir. spaCy ile fiil + demonstrative kombinasyonları da yakalanır.
Kural B — Sessizlik tespiti: Konuşmacının 5+ saniye sessiz kaldığı anlar genellikle demo veya görsel içerik gösteriyor demektir.
Her video bittikten sonra TF-IDF çalışır: seçilen timestamp'lere yakın metinler ile arka plan metinleri karşılaştırılır, yüksek lift'li terimler data/keyword_store.json'a yazılır. Sistem izledikçe domain'e özgü vocabulary öğrenir.
Frame sayısına göre adaptif çözünürlük:
| Frame | Grid | Hücre |
|---|---|---|
| 1 | 1×1 | 1280px |
| 2 | 2×1 | 1024px |
| 3–4 | 2×2 | 960px |
| 5–6 | 3×2 | 800px |
| 7–9 | 3×3 | 720px |
| 10–12 | 4×3 | 640px |
| 13+ | 3×3 sayfalar | 720px |
12'den fazla frame otomatik olarak birden fazla JPEG sayfasına bölünür.
| Paket | Amaç |
|---|---|
yt-dlp |
YouTube transcript + video indirme |
Pillow |
Storyboard grid oluşturma |
spaCy |
NLP timestamp analizi |
scikit-learn |
TF-IDF self-learning |
webvtt-py |
VTT altyazı parse |
click |
CLI |
groq |
Whisper API fallback |
| Hata | Çözüm |
|---|---|
ffmpeg not found |
brew install ffmpeg |
No module named spacy |
pip install spacy && python -m spacy download en_core_web_sm |
Cannot access video |
Video private, yaş kısıtlı veya bölge engelinde olabilir |
| Transcript bulunamadı | --groq-api-key ile Whisper fallback kullan |
Module import error |
Venv aktif mi kontrol et: source .venv/bin/activate && pip install -e . |