watch — Assistente de Vídeo (Frame a Frame + Transcrição)

Assiste a qualquer vídeo por URL (YouTube, Loom, gravação do Zoom, mp4 direto) — não só a transcrição, mas o que é realmente MOSTRADO na tela. Os frames são extraídos por detecção de cena (ffmpeg scene detection), não por temporizador, para não perder gráficos, demonstrações, edições ou b-roll. Áudio: legendas via yt-dlp primeiro, Whisper como fallback.

O que é watch — Assistente de Vídeo (Frame a Frame + Transcrição)?

Esta skill capacita o Claude a analisar vídeos de ponta a ponta, compreendendo tanto o conteúdo textual (transcrição) quanto o visual (quadros/imagens). Diferente de abordagens baseadas apenas em temporizador, o assistente usa detecção de cenas do ffmpeg para capturar frames apenas quando há mudanças significativas na imagem, preservando slides, código, demos e gráficos que podem ser perdidos em amostragem temporal simples. A skill funciona com qualquer URL de vídeo: YouTube, Loom, gravações do Zoom ou arquivos mp4 diretos. Para YouTube, utiliza yt-dlp com configurações especiais (cookies, PO-token, n-challenge) para contornar as proteções do site em 2025+. A transcrição é extraída primeiro de legendas nativas (via yt-dlp), economizando tempo e recursos; caso não haja legendas, o Whisper (modelo small) faz a transcrição por áudio. O workflow completo inclui: criação de pasta de trabalho temporária, download do vídeo em baixa resolução (480p), extração de frames por cena, leitura da transcrição e análise combinada para gerar um resumo (TL;DR), conceitos-chave com timestamps, e destaques visuais que não aparecem no texto. A skill também pode salvar a análise em uma base de conhecimento (como Obsidian) mediante confirmação do usuário.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/akimov121-hub/watch/tree/main

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

watch — Claude assiste a um vídeo do início ao fim

Divide um vídeo no que o Claude lê nativamente: imagens dos quadros (vistas com a ferramenta Read) + uma transcrição (texto). O resultado é a compreensão não apenas das palavras, mas do que está acontecendo na tela.

Bilíngue. Esta é a versão em inglês. Um espelho completo em russo é SKILL.ru.md. Trabalhe no idioma que o usuário usar; o fluxo de trabalho e os comandos são idênticos.

Dependências (instaladas uma vez via install.sh)

Verifique com: command -v yt-dlp ffmpeg whisper node.

  • yt-dlp → ~/.local/bin/yt-dlp (no Python 3.12 em ~/.local/python312 — o Python do sistema geralmente é muito antigo; versões recentes do yt-dlp precisam de 3.10+);
  • ffmpeg → a partir de imageio-ffmpeg, link simbólico para ~/.local/bin/ffmpeg;
  • whisper → openai-whisper (no Python do sistema; o modelo é baixado no primeiro uso);
  • node → ~/.local/node (v24) — necessário para contornar as defesas do YouTube.

Para YouTube especificamente, install.sh também configura:

  • um provedor de PO-token (bgutil), construído em modo script sob ~/.local/bgutil-pot/server/build/;
  • um runtime Node.js + um componente EJS, para resolver o n-challenge do YouTube;
  • cookies de uma conta logada do YouTube, em ~/.config/watch/cookies.txt.

Se os cookies ficarem desatualizados (o YouTube começar a pedir "confirme que você não é um robô" novamente), peça ao usuário para reexportar cookies.txt com uma extensão de navegador como "Get cookies.txt LOCALLY" e colocar em ~/.config/watch/cookies.txt.

Sempre baixe através do wrapper bash ~/.claude/skills/watch/yt.sh … — ele adiciona automaticamente as flags corretas do YouTube. Para URLs diretas de mp4/Loom/Zoom, as flags extras são inofensivas.

Fluxo de trabalho

1. Configuração

  • Crie uma pasta de trabalho: mkdir -p /tmp/watch/<slug> (slug = um nome curto a partir da URL/tópico).
  • Analise a URL (YouTube / Loom / link de compartilhamento do Zoom / arquivo de vídeo direto). Um arquivo local pula as etapas de download — trabalhe diretamente com ele.

2. Transcrição — legendas primeiro (grátis, quando disponíveis)

bash ~/.claude/skills/watch/yt.sh --write-subs --write-auto-subs --sub-langs "en,ru" \
  --skip-download --convert-subs srt -o "/tmp/watch/<slug>/subs.%(ext)s" "<URL>"

Se um arquivo .srt aparecer, essa é uma transcrição pronta com timestamps — use-a.

3. Baixar o vídeo (necessário tanto para os quadros quanto como fallback do Whisper)

bash ~/.claude/skills/watch/yt.sh -f "bv*[height<=480]+ba/b[height<=480]/18/best" \
  -o "/tmp/watch/<slug>/video.%(ext)s" "<URL>"

Você obterá um .mp4 ou .webm — use o nome de arquivo real daqui em diante (video.*). Se não houver legendas, transcreva o áudio com Whisper (modelo small; base é mais rápido para um teste rápido):

whisper "/tmp/watch/<slug>/video.webm" --model small --language en \
  --output_format srt --output_dir "/tmp/watch/<slug>/"

A primeira execução baixa o modelo (~460 MB para small) — é normal, ocorre uma única vez. Remova --language en para áudio que não seja em inglês, ou defina o código de idioma correto. Whisper é lento: um clipe de 34 minutos leva vários minutos — execute-o em segundo plano.

4. Quadros POR MUDANÇA DE CENA (a etapa principal — não por temporizador)

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "select='gt(scene,0.3)',showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"
  • Limiar 0.3 — ajuste entre 0.2–0.4 para densidade de cena (um limiar menor = mais quadros).
  • Obtenha o timestamp de cada quadro a partir do log showinfo (pts_time) em scenes.log.
  • Se houver muitos quadros (um vídeo longo), mantenha cerca de 60–150 dos mais informativos, eliminando quadros que estão próximos no tempo. Decodificar um vídeo longo leva um tempo — execute-o em segundo plano.

FALLBACK — se houver poucas cenas (0–2 quadros). Imagens suaves e sem cortes (um único take contínuo, um drone, um cabeça falante) produzem poucas mudanças de cena. Nesse caso, amostre em um intervalo fixo:

ffmpeg -i "/tmp/watch/<slug>/video.webm" -vf "fps=1/5,scale=960:-1,showinfo" \
  -vsync vfr "/tmp/watch/<slug>/frames/frame_%04d.png" 2> "/tmp/watch/<slug>/scenes.log"

Ajuste o intervalo (1/5 = um quadro a cada 5s) de acordo com a duração do vídeo para que você fique por volta de ~150 quadros. O timestamp do i-ésimo quadro = i × intervalo.

4a. YouTube: por que tudo passa pelo yt.sh

O YouTube (2025+) exige todos os três itens a seguir ao mesmo tempo, caso contrário você obtém HTTP 403 / "não é um robô" / "apenas imagens":

  1. cookies de uma conta logada (~/.config/watch/cookies.txt);
  2. um PO-token (prova de origem) — gerado localmente pelo bgutil (modo script, Node);
  3. resolver o n-challenge — um runtime Node + um componente EJS (--remote-components ejs:github). Tudo isso já está embutido no yt.sh — basta chamá-lo. Fontes diretas de mp4/Loom/Zoom não têm essas defesas. Se pedir "confirme que você não é um robô" novamente, os cookies ficaram desatualizados — peça um cookies.txt novo.

5. Análise

  • Leia a transcrição (.srt).
  • Observe os quadros extraídos (visão, através da ferramenta Read): slides, código, demonstrações, gráficos.
  • Relacione os visuais à transcrição usando os timestamps.

6. Relatório

Entregue:

  • um Resumo Executivo (3–5 linhas);
  • conceitos-chave com timestamps;
  • o que é MOSTRADO NA TELA que não está no texto (gráficos, UIs, demonstrações);
  • momentos / citações notáveis com timestamps.

7. Salvar em uma base de conhecimento (pergunte primeiro)

Pergunte: "Salvar esta análise na sua base de conhecimento (Obsidian)?" Se sim, escreva uma nota em markdown na pasta correta com links para notas relacionadas. Não salve sem confirmação.

Regras

  • Os arquivos de trabalho vão para uma pasta temporária /tmp/watch/<slug> — não polua o projeto.
  • Não publique ou envie nada externamente sem uma solicitação explícita.
  • Não ignore um vídeo privado com exigência de login — avise o usuário.

Habilidades Relacionadas