Communitygithub.com

Pugnola/resumo-de-video

Obtém a transcrição de um link de vídeo (YouTube e outros sites suportados pelo yt-dlp) e produz um resumo detalhado e compacto cobrindo todos os tópicos principais.

O que é resumo-de-video?

Esta skill permite que um agente de IA, como Claude Code ou Cursor, resuma vídeos de forma abrangente a partir de um link, utilizando transcrições (via yt-dlp) e armazenando os resultados localmente. Ela suporta YouTube e outros sites compatíveis, gerenciando links únicos, múltiplos vídeos e playlists. O agente primeiro determina o tipo de entrada (link único, múltiplo, playlist ou consulta a resumos antigos) e, para cada vídeo, baixa a transcrição usando um script shell. O resumo gerado é estruturado em seções como Visão Geral, Principais Tópicos (com timestamps clicáveis para YouTube) e Conclusão, sempre no idioma da conversa do usuário. A skill também oferece um modo de Análise Visual, extraindo frames de cenas-chave, e uma funcionalidade de Consulta ao Arquivo, onde o usuário pode perguntar sobre vídeos resumidos anteriormente sem fornecer um link, pesquisando nos arquivos locais ~/VideoSummaries.

Funciona com✓Claude Code~Codex CLI~Cursor
npx skills add Pugnola/video-summary-skill

Perguntar na sua IA favorita

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

Prévia

Do README da skill

Documentação

Resumo Detalhado de Vídeo

Link do vídeo fornecido pelo usuário: $ARGUMENTS

Etapa 0 — Determinar o tipo de entrada

  • Sem link, pergunta sobre vídeos passados → vá para a seção "Consulta ao Arquivo" no final; não baixe uma nova transcrição.

  • Link de vídeo único → vá diretamente para a Etapa 1.

  • Múltiplos links de vídeo → execute cada um pelas Etapas 1-3 em ordem. Cada vídeo recebe seu próprio resumo completo (mesmo formato), separado por ---, e cada um é salvo em seu próprio arquivo. Você pode adicionar uma nota de 1-2 frases no final sobre o que os vídeos compartilham/diferem (não um relatório).

  • Link de playlist (URL contendo /playlist?list= e sem v=) → busque a lista primeiro:

    bash ~/.claude/skills/video-summary/fetch_transcript.sh --list "<URL_DA_PLAYLIST>"
    

    Cada linha fornece url | título | duração.

    • 5 vídeos ou menos: processe todos em ordem (como links múltiplos).
    • Mais de 5: primeiro mostre ao usuário a contagem de vídeos e a lista de títulos; pergunte se ele quer todos, os primeiros N ou uma seleção. Não comece o processamento sem confirmação.
  • URL mista de vídeo + playlist (watch?v=...&list=...) → resuma apenas aquele vídeo único; ao final do resumo, mencione em uma frase que o link pertence a uma playlist e que você pode resumir o resto se ele quiser.

Etapa 1 — Buscar a transcrição

Execute:

bash ~/.claude/skills/video-summary/fetch_transcript.sh "<URL_DO_VIDEO>"

O script imprime:

  • === INFORMAÇÕES DO VÍDEO === — título, canal, duração, data
  • === CAPÍTULOS === — lista com timestamps se o uploader definiu capítulos (seção ausente caso contrário)
  • === TRANSCRIÇÃO === — transcrição limpa com timestamps

Observações:

  • Vídeos buscados anteriormente são lidos instantaneamente do arquivo ~/VideoSummaries/transcripts/<video-id>.txt (você verá uma linha (Transcrição lida do arquivo: ...)) — sem necessidade de internet.
  • Se a transcrição for muito longa (a saída do script for truncada), redirecione a saída para um arquivo rascunho e leia em partes — não pule nada.
  • Para vídeos sem legendas, se o whisper estiver instalado, o script baixa o áudio e transcreve localmente — isso pode levar minutos, então execute o comando com um timeout longo (600000 ms). Uma linha "(Sem legendas — ... whisper ...)" no stderr indica esse caminho.
  • Se retornar "ERRO: sem legendas" + "SUGESTÃO_WHISPER": informe ao usuário que o vídeo não tem legendas e que instalar o whisper (repasse os comandos de instalação da mensagem de erro) permitiria que ele também resumisse. Nunca invente uma análise sem uma transcrição.
  • Se retornar "ERRO: não foi possível obter informações do vídeo" + "SUGESTÃO_COOKIE": NÃO tente novamente com cookies por conta própria — informe ao usuário que o YouTube está bloqueando a requisição e pergunte se ele deseja tentar novamente com os cookies do navegador. Se ele aprovar, execute novamente o mesmo comando com a variável de ambiente COOKIES=1 (mencione que uma solicitação de permissão do macOS Keychain pode aparecer).

Etapa 2 — Escrever o resumo detalhado

O objetivo é um RESUMO DETALHADO: alguém que não assistiu ao vídeo deve aprender todos os tópicos principais, argumentos e números-chave — mas isso NÃO é uma recontagem da transcrição. Não pule nenhum tópico principal; não relate cada frase ou exemplo secundário dentro de um tópico.

Extensão alvo: ~300-450 palavras no total para um vídeo de 15 minutos; aumente proporcionalmente para vídeos mais longos, mas nunca exceda uma página (~700 palavras).

Idioma: escreva sempre o resumo no idioma em que o usuário está se comunicando (independentemente do idioma do vídeo). Se não estiver claro, use o idioma do vídeo.

Estrutura:

# <Título do Vídeo>
**Canal:** ... · **Duração:** ... · **Data:** ...

## Visão Geral
O tópico e a mensagem central do vídeo (2-3 frases).

## Principais Tópicos
Um bullet por tópico principal no vídeo (um vídeo típico tem 4-8):

- **[MM:SS] Título do tópico** — a essência desse tópico em 2-4 frases:
  a ideia principal, qualquer número/exemplo crítico, a conclusão alcançada.

Títulos de seção: se a saída do script tiver `=== CAPÍTULOS ===`, construa os bullets a partir desses capítulos e timestamps (traduza os títulos para o idioma de saída; pule capítulos sem conteúdo, como intros/patrocinadores; mescle capítulos consecutivos muito curtos em um único bullet). Se não houver CAPÍTULOS, identifique as transições de tópico a partir da transcrição.

## Conclusão
A conclusão final do palestrante e a ação recomendada para o espectador (2-4 frases). Se você tiver seu próprio comentário/ressalva, adicione-o no final em uma única frase, claramente separado.

Regras:

  • Nunca inclua intros, pedidos de inscrição, leituras de patrocinadores ou anúncios.
  • Pegue os timestamps dos marcadores [MM:SS] na transcrição; nunca os invente.
  • Timestamps clicáveis: para vídeos do YouTube, transforme cada marcação [MM:SS] em um link para aquele segundo do vídeo: [06:09](https://youtu.be/<ID_DO_VIDEO>?t=369) (t = segundos totais). Aplique isso tanto na saída do chat quanto no arquivo salvo. Para fontes que não sejam do YouTube, deixe o timestamp como texto simples; não crie links falsos.
  • Não adicione informações que não estejam na transcrição.
  • Se houver 1-2 citações verdadeiramente marcantes, inclua-as dentro do bullet relevante; não abra uma seção separada.
  • Se o usuário pedir para "aprofundar" ou sobre uma parte específica, a transcrição está no contexto — expanda essa parte o quanto ele quiser.
  • Sugestão visual: se a transcrição tiver 3 ou mais referências visuais ("este gráfico", "aquela tabela", "na tela", "como você pode ver aqui", etc.), acrescente uma única linha ao final do resumo: "📊 Este vídeo parece ter muitos elementos visuais — posso analisar os gráficos/capturas de tela também, se quiser." Se o usuário aprovar, mude para o Modo de Análise Visual. Se não houver referências visuais, não adicione a nota.

Etapa 3 — Salvar o resumo no arquivo

A mensagem no chat é a entrega principal: SEMPRE imprima o resumo completo na conversa primeiro. O arquivo de arquivo é apenas uma cópia extra — nunca pule a saída do chat e apenas escreva o arquivo, e nunca substitua o resumo por um ponteiro para o arquivo.

Após imprimir o resumo no chat, salve o mesmo conteúdo com a ferramenta Write em:

~/VideoSummaries/<AAAA-MM-DD>-<titulo-do-video-em-kebab-case>.md

(Data = hoje. Abrevie o título para minúsculas, ASCII, separado por hífen; máximo de 60 caracteres.)

Adicione este bloco de metadados no topo do arquivo:

> **Vídeo:** <URL>
> **Resumido em:** AAAA-MM-DD

Em sua mensagem final, informe ao usuário o caminho do arquivo em uma única linha.

Modo de Análise Visual — quando o usuário aprova ou pede antecipadamente

Quando o usuário aprovar a análise visual (ou pedir antecipadamente com algo como "incluindo os gráficos"), faça ISSO ALÉM DO resumo da transcrição:

  1. Escolha os momentos: colete os segundos dos momentos de referência visual da transcrição (onde o palestrante diz "olhe para isso", "este gráfico"). Se não houver momentos claros, use auto (detecção de mudança de cena).

  2. Extraia os frames (pode levar um tempo — use um timeout de 600000 ms):

    bash ~/.claude/skills/video-summary/extract_frames.sh "<URL>" "<rascunho>/frames" "369,430,585"
    

    O último argumento é a lista de segundos; omita-o para auto. O script imprime os caminhos dos arquivos de frame (frame_006-09.jpg = 06:09). No máximo 12 frames são extraídos.

  3. Veja os frames com Read e interprete-os.

  4. Escreva uma seção "## Análise Visual": para cada frame significativo, um timestamp clicável + o que a imagem mostra + como se conecta à afirmação do palestrante naquele momento. Pule frames sem informação (apenas um rosto, uma tela de introdução).

  5. Acrescente a seção ao arquivo de resumo salvo também (com Edit).

  6. Se o script disser "ffmpeg não está instalado", repasse a sugestão brew install ffmpeg; se disser que nenhuma mudança de cena foi encontrada, informe ao usuário que o vídeo é visualmente estático (nada a analisar).

  7. Se o script disser "não foi possível baixar" + "SUGESTÃO_COOKIE": NÃO tente novamente com cookies por conta própria — informe ao usuário que o YouTube está bloqueando o download e pergunte se ele deseja tentar novamente com os cookies do navegador. Se ele aprovar, execute novamente o mesmo comando com a variável de ambiente COOKIES=1 (mencione que uma solicitação de permissão do macOS Keychain pode aparecer).

Consulta ao Arquivo — sem link, pergunta sobre vídeos passados

Quando o usuário perguntar sobre vídeos resumidos anteriormente sem uma URL ("o que o vídeo que resumi semana passada disse sobre X", "o que há no meu arquivo sobre Y", "quais foram os temas comuns dos vídeos do mês passado"):

  1. Varredura ampla: Pesquise com grep nos resumos ~/VideoSummaries/*.md por palavras-chave. Junto com o idioma do usuário, também tente equivalentes em inglês prováveis (os resumos seguem o idioma do usuário, mas citações/termos podem estar no idioma original do vídeo).
  2. Aprofundamento: Leia os resumos correspondentes. Se o resumo não for suficiente (redação exata, contexto ou um detalhe que não entrou no resumo), vá para a transcrição bruta do mesmo vídeo: pegue o ID do vídeo da URL no bloco de metadados do resumo e leia/pesquise em ~/VideoSummaries/transcripts/<video-id>.txt.
  3. Respostas citadas: Dê cada fato com sua fonte — título do vídeo, data do resumo, timestamp. Torne os timestamps clicáveis também aqui (a URL do vídeo está no bloco de metadados do resumo). Nunca preencha lacunas com base em memória ou suposições; se não estiver no arquivo, diga isso explicitamente.
  4. Filtros de data: Os nomes de arquivo seguem AAAA-MM-DD-titulo.md — filtre intervalos como "mês passado" pelo nome do arquivo.
  5. Este modo é totalmente local: sem YouTube, sem internet.

Habilidades Relacionadas