Created
June 1, 2026 17:14
-
-
Save alanalvestech/3fa6102e4d62a7b704a2906f7ac62af7 to your computer and use it in GitHub Desktop.
skill_youtube.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Preciso que você crie uma skill do Claude Code chamada youtube que usa yt-dlp para analisar vídeos automaticamente. | |
| Pré-requisito: ter yt-dlp instalado (pip install yt-dlp). | |
| Passo 1 — criar as pastas: | |
| mkdir -p ~/.claude/skills/youtube/scripts | |
| Passo 2 — criar o arquivo ~/.claude/skills/youtube/SKILL.md com o conteúdo abaixo: | |
| --- | |
| name: youtube | |
| description: Analisa vídeos do YouTube usando yt-dlp para extrair metadados e transcrição. Use SEMPRE que o usuário pedir para analisar, resumir, ou comentar sobre um link do | |
| YouTube. NUNCA use playwright para isso. | |
| --- | |
| # YouTube Analyzer | |
| Analisa qualquer vídeo do YouTube usando `yt-dlp` para extrair metadados e transcrição completa. | |
| ## Trigger | |
| Ativar automaticamente sempre que o usuário: | |
| - Passar um link do YouTube (`youtube.com/watch`, `youtu.be/`, `youtube.com/shorts/`) | |
| - Pedir para "analisar", "resumir", "o que fala", "explica esse vídeo" + URL do YouTube | |
| **NUNCA usar playwright para vídeos do YouTube — sempre usar este fluxo com yt-dlp.** | |
| ## Fluxo | |
| ```bash | |
| bash ~/.claude/skills/youtube/scripts/get-transcript.sh "<URL>" | |
| ``` | |
| ## Após obter os dados | |
| Se o usuário não especificar o tipo de análise, fazer um resumo estruturado com: | |
| 1. Sobre o vídeo (canal, data, contexto) | |
| 2. Ideia central | |
| 3. Pontos principais (bullet points) | |
| 4. Takeaways práticos | |
| ## Erros comuns | |
| - **429 Too Many Requests**: normal — o script usa o primeiro idioma que funcionar | |
| - **Sem transcrição**: informar e oferecer analisar só pela descrição/título | |
| - **yt-dlp desatualizado**: sugerir `pip install -U yt-dlp` | |
| Passo 3 — criar o script ~/.claude/skills/youtube/scripts/get-transcript.sh: | |
| #!/usr/bin/env bash | |
| URL="$1" | |
| if [ -z "$URL" ]; then | |
| echo "Usage: $0 <youtube-url>" >&2 | |
| exit 1 | |
| fi | |
| TMP=$(mktemp -d) | |
| trap "rm -rf $TMP" EXIT | |
| echo "=== METADADOS ===" | |
| yt-dlp --no-playlist --skip-download \ | |
| --print "Título: %(title)s" \ | |
| --print "Canal: %(uploader)s" \ | |
| --print "Data: %(upload_date>%d/%m/%Y)s" \ | |
| --print "Duração: %(duration_string)s" \ | |
| --print "Views: %(view_count)s" \ | |
| "$URL" 2>/dev/null | |
| echo "" | |
| echo "=== DESCRIÇÃO ===" | |
| yt-dlp --no-playlist --skip-download --print "%(description)s" "$URL" 2>/dev/null | |
| echo "" | |
| echo "=== TRANSCRIÇÃO ===" | |
| yt-dlp \ | |
| --write-subs --write-auto-subs \ | |
| --sub-langs "pt-orig,pt,en" \ | |
| --skip-download \ | |
| -o "$TMP/sub" \ | |
| --no-playlist \ | |
| "$URL" 2>/dev/null | |
| SUB_FILE="" | |
| for lang in "pt-orig" "pt" "en"; do | |
| for ext in "srt" "vtt"; do | |
| f="$TMP/sub.$lang.$ext" | |
| if [ -f "$f" ]; then | |
| SUB_FILE="$f" | |
| echo "(Idioma: $lang)" | |
| break 2 | |
| fi | |
| done | |
| done | |
| if [ -z "$SUB_FILE" ]; then | |
| SUB_FILE=$(ls "$TMP"/*.vtt "$TMP"/*.srt 2>/dev/null | head -1) | |
| fi | |
| if [ -z "$SUB_FILE" ]; then | |
| echo "Transcrição não disponível para este vídeo." | |
| exit 0 | |
| fi | |
| grep -v "^WEBVTT\|^Kind:\|^Language:\|^NOTE\|^[0-9]*$\|^[0-9][0-9]:[0-9][0-9]:[0-9][0-9]" "$SUB_FILE" \ | |
| | sed 's/<[^>]*>//g' \ | |
| | grep -v "^[[:space:]]*$" \ | |
| | awk 'prev != $0 { print; prev=$0 }' \ | |
| | tr '\n' ' ' \ | |
| | sed 's/ */ /g' | |
| echo "" | |
| Passo 4 — dar permissão de execução: | |
| chmod +x ~/.claude/skills/youtube/scripts/get-transcript.sh | |
| Pronto. Agora sempre que você mandar um link do YouTube pro Claude Code, ele automaticamente usa o yt-dlp para pegar metadados e transcrição antes de analisar. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Testei a skill no macOS (Apple Silicon) e funcionou muito bem 🙌 — metadados, descrição e transcrição saindo certinho. Mas esbarrei em dois pontos que podem fazer a transcrição falhar dependendo do ambiente/vídeo, e queria deixar a correção registrada.
1)
yt-dlpprecisa decurl_cffi(impersonation) pra baixar legendaNo
yt-dlprecente (testei na2026.03.17), o endpoint de legendas (timedtext) respondeHTTP Error 429: Too Many Requestsse o yt-dlp não conseguir se passar por um browser. Semcurl_cffi,--list-impersonate-targetsmostra tudo como(unavailable).Detalhe traiçoeiro: a versão mais nova do
curl_cffi(0.15.0) aparece como(unsupported)pra essa build. Resolvi com downgrade:2) Um
429num idioma aborta os outros (bug no script)O script pede os três idiomas numa única chamada:
--sub-langs "pt-orig,pt,en". O yt-dlp baixa em ordem e, se o primeiro idioma toma429(comum nas legendas auto-traduzidas, ex.:ptnum vídeo em inglês), oERRORaborta a chamada inteira antes de tentar oen— e o vídeo cai no "Transcrição não disponível" mesmo tendo legenda em inglês disponível.A correção é baixar um idioma por vez (e passar
--impersonate chrome), parando no primeiro que funcionar. Assim um429noptnão derruba oen:(O resto do script — metadados, descrição, fallback e limpeza do
.vtt— fica igual.)Com esses dois ajustes a transcrição passou a vir de forma consistente, inclusive em vídeos só-inglês onde o
ptauto-traduzido tomava429. Valeu pela skill! 🚀