bounce12340/josh-video-skills

Cria Reels no formato vertical (9:16) de entrevistas e palestras, no estilo Fox Hsiao: narração intercalada com trechos originais de 15 a 30 segundos, com legendas em chinês tradicional e créditos de fonte.

O que é josh-video-skills?

Esta skill automatiza a produção de vídeos curtos verticais (Reels) para entrevistas e palestras, seguindo o estilo do criador Fox Hsiao. Ela recebe um arquivo JSON de especificação e, a partir dele, gera o vídeo final completo com narração, música de fundo, clipes originais, legendas e créditos. O processo inclui download e corte de clipes do YouTube, transcrição automática via faster-whisper, síntese de voz pela ElevenLabs (com suporte a chinês tradicional e inglês), busca de B-roll no Pexels e renderização final. A skill possui regras rigorosas de atribuição de fontes (sempre citando o canal original e o evento), controle de proporção entre narração e trechos originais (máximo de 40% de áudio original) e verificação de direitos autorais por fair use. O resultado são arquivos prontos para postagem: vídeo 720p de prévia, contato, créditos, capa e especificação de capa.

Funciona com✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/bounce12340/josh-video-skills/tree/HEAD/interview-reel

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

interview-reel:Reel de Entrevistas/Palestras (Estilo Fox Hsiao)

Josh 2026-10-12 Aprovado: entrevistas com personalidades no estilo Fox, narração intercalada com trechos originais de 15 a 30 segundos, com créditos de fonte. Skill fixa. Esta skill gera apenas rascunho, não publica. Publicação é sempre feita pelo bot principal após confirmação do Josh.

  • Scripts: <SKILLS_DIR>/interview-reel/scripts/ (doravante $S)
  • Exemplo de spec: examples/mcp_test.spec.json (entrevista oficial da Anthropic sobre MCP, vídeo de teste)
  • Resultado de referência: <YOUR_WORKSPACE>/media-team/03-drafts/interview-reel-test/test.mp4
  • Vídeos de referência: <YOUR_WORKSPACE>/refs/ig-DeWJjxJyoEb/ (Fox Hsiao, Musk Terafab, formato a ser seguido), <YOUR_WORKSPACE>/refs/ig-DWVQfDmE41Z/ (AI Post, Jensen Huang, apenas áudio original, o mais simples, não seguir nem creditar)
  • Reutiliza: common.py de stock-footage-reel (fontes, download), synth_music.py (música original), cache do Pexels; venv do OpenMontage (faster-whisper, yt-dlp) e elevenlabs_tts; capa <YOUR_WORKSPACE>/media-team/00-profile/covers/render.py.

Formato (extraído do vídeo do Fox Hsiao)

SegmentoImagemÁudio
hook (0 a ~11s)B-roll 9:16 em tela cheia (escurecido, zoom lento), troca a cada 1 a 2.5s; placa grande no canto superior esquerdo (tag pequena vermelha + duas linhas em negrito, palavras-chave em laranja)Narração (chinês <YOUR_VOICE_NAME> / inglês Sarah Explains) + música
clip (áudio original, 15 a 30s cada, 3 a 4 segmentos)Vídeo original 16:9 centralizado (y=468), preenchido com o mesmo vídeo desfocado e escurecido; texto pequeno "Vídeo / Canal Original" no canto superior esquerdo; tag vermelha "Áudio Original" abaixo + "Nome em inglês Nome chinês ou cargo" + "Evento|YYYY.MM.DD"Apenas áudio original, sem narração; música mais baixa (clip_music_db) com sidechain ducking
explainer (narração, intercalada entre clipes)Mesmo do hook, placa substituída por cartão de fato, texto pequeno "Fonte: Quem|Data" na parte inferior; troca de imagem a cada 2 a 3.2sNarração (chinês <YOUR_VOICE_NAME> / inglês Sarah Explains) + música
outroPergunta grande centralizada (palavras-chave em amarelo) + marca do canal + @bounce12340 + linha de créditos no rodapéNarração perguntando ao público (chinês <YOUR_VOICE_NAME> / inglês Sarah Explains)

Compartilhado em todo o vídeo: barra de título fixa no topo (marca + título, palavras-chave em laranja); legendas centralizadas, chinês tradicional grande (branco, negrito, sombra suave, palavras-chave em amarelo) + linha pequena em inglês abaixo. O inglês na narração é o texto original; o inglês nos clipes é a transcrição da fala original, o chinês é nossa tradução.

Regras da Casa (devem ser seguidas)

  • 1080x1920, até 3 minutos, Instagram final até 45 MB (acima disso reduz taxa de bits automaticamente), H.264/AAC.
  • Narração: conforme o idioma, escolher voz ElevenLabs. Chinês: "<YOUR_VOICE_NAME>" (<YOUR_ELEVENLABS_VOICE_ID>); inglês: Sarah Explains (Nhs7eitvQWFTQBsf0yiT). Modelo eleven_multilingual_v2, usando elevenlabs_tts do OpenMontage. Chave é variável de ambiente ELEVENLABS_API_KEY (carregada com bash -lc), não imprimir ou salvar em arquivo.
  • Legendas: chinês tradicional principal + inglês pequeno. Terminologia taiwanesa (software, dados, vídeo, internet, recursos computacionais…), aspas "「」", sem travessão (build.py bloqueará).
  • Narração deve ser maioria: áudio original total recomendado abaixo de 40%, acima de 50% build.py bloqueia. Cada clipe original no máximo 30s (prep_clips.py bloqueará), recomendado 15 a 30s.
  • Clipes originais sem narração sobreposta, sem alterar fala original; tradução chinesa deve ser fiel ao significado, não adicionar conclusão ao palestrante.
  • Fiel à fonte: números e datas na narração devem vir da fonte primária, usar cite no cartão "Fonte: Quem|Data" e registrar em facts.md.
  • Final deve conter uma pergunta ao público (outro.question deve ter "?").
  • Capa usar covers/render.py, cover.template padrão "E" (rosto da pessoa, Josh chama "D Rosto"). Josh 2026-10-12 já definiu: todas as entrevistas com personalidades usam este template.

Fontes de Material e Licenciamento (registrado no credits.json de cada vídeo)

  1. Priorizar fontes oficiais: canais oficiais das empresas (Anthropic, OpenAI, NVIDIA, Microsoft…), organizadores do evento (GTC, Build, TED…), canal do próprio podcast. O spec deve ter o nome do canal original, prep_clips.py comparará com o campo channel do YouTube, alertando se divergir.
  2. Nunca usar versões republicadas/com marca d'água de terceiros (ex.: reupload de fã page, clipes editados por outra conta, adicionaram logo de outro). Se não encontrar versão oficial, não fazer este segmento.
  3. Sempre creditar na tela: abaixo do áudio original "Áudio Original Nome|Evento|Data" + canto superior esquerdo "Vídeo / Canal Original", repetir no rodapé final, na descrição da postagem colar caption_credits do credits.json.
  4. credits.json registra automaticamente: URL da fonte, canal, URL do canal, título do vídeo, data de upload, tempos de corte (source_in/source_out), posição no vídeo final, URLs e autores dos B-roll, narração, música.
  5. Nota de licenciamento: os direitos autorais dessas imagens de entrevistas pertencem aos canais originais, não temos licença, utilizamos com base no fair use de comentário e citação (artigos 52 e 65 da Lei de Direitos Autorais de Taiwan), área cinzenta. Portanto: cada trecho curto, o vídeo todo com comentário e análise de Josh (transformação), áudio original apenas como evidência; não copiar trechos inteiros, não editar para dar sentido que o palestrante não disse.
  6. Não sugerir endosso: não escrever "Recomendado por …", "Parceria oficial" etc.; capa e título não devem sugerir que o palestrante apoia Josh ou seus produtos.
  7. Download: usar apenas yt-dlp para vídeos públicos, sem login, sem cookies, sem contornar paywall ou restrições geográficas. Nesta máquina, --download-sections do YouTube retorna 403, então prep_clips.py baixa o vídeo inteiro (até 1080p) em cache/sources/ e corta com ffmpeg.
  8. Se o canal original solicitar remoção ou Josh não se sentir confortável, substituir por citação textual sem imagem.

Fluxo

D=<YOUR_WORKSPACE>/media-team/03-drafts/<tema>-interview ; mkdir -p $D/work
cp $S/../examples/mcp_test.spec.json $D/spec.json      # alterar para o conteúdo
bash -lc "source <SKILLS_DIR>/OpenMontage/om-env.sh >/dev/null; cd $S; python prep_clips.py --spec $D/spec.json --work $D/work"
  1. Selecionar trechos: ler os capítulos do vídeo original (yt-dlp --print description), escolher no vídeo oficial trechos de 15 a 30s onde o palestrante completa um ponto-chave. Transcrição com prep_clips.py; se quiser apenas ouvir, baixar o vídeo inteiro e cortar um trecho com ffmpeg.
  2. prep_clips.py: baixar, cortar, transcrever (faster-whisper medium, CPU ~20s de clipe em ~10s). Imprime modelo "subs": colar de volta no clip, traduzir zh para chinês tradicional taiwanês, pode mesclar ou dividir segmentos (t é tempo relativo ao início do clipe). Inglês segue a fala original do palestrante, se houver dúvida na transcrição, ouvir novamente ou usar modelo diferente para verificação cruzada (--retranscribe --model small).
  3. tts.py: um arquivo de áudio por linha, texto idêntico enviado apenas uma vez (cacheado por hash em cache/tts/). Executar --dry-run primeiro para ver quantos caracteres serão enviados. Plano B em caso de falha: conector user-Elevenlabs creative_generate_speech (generations_count: 1), salvar no caminho de cache impresso.
  4. fetch_broll.py: para cada palavra-chave, buscar 3 vídeos no Pexels (paisagem preferencialmente, palavras-chave mais precisas). Usar termos visuais concretos ("server rack lights", "programmer coding"), não abstratos. Também pode usar "image" (estática, com zoom lento) ou "file" (ex.: gravação de tela de site).
  5. build.py --check: exibe duração, proporção de áudio original, tempos de cada legenda e avisos de regras.
  6. build.py: renderiza o vídeo. Ou executa tudo de uma vez: bash $S/run.sh $D/spec.json $D <name> (subs devem estar traduzidas primeiro).

Campos do Spec

{
  "title": "Título fixo no topo, [[destaque]] fica laranja",
  "voice": {"voice_id": "Nhs7eitvQWFTQBsf0yiT", "model": "eleven_multilingual_v2"},  // inglês Sarah Explains; para chinês alterar para `<YOUR_ELEVENLABS_VOICE_ID>` (sua voz chinesa)
  "music": "synth",            // música original sintetizada; ou caminho de arquivo (com music_license); ou "none"
  "music_db": -19,             // volume base da música
  "clip_music_db": -8,         // redução adicional em dB durante clipes originais
  "gap": 0.28,                 // pausa após cada linha de narração (segundos), pode ser sobrescrito por line.pause
  "max_cut": 3.2,              // troca de imagem a cada quantos segundos na narração (hook padrão 2.4, pode ser sobrescrito por seg.max_cut)
  "segments": [
    {"type": "hook", "broll": ["palavra-chave"], "lines": [
      {"en": "Narração inglês", "zh": "Legenda chinês", "card": {"tag": "Tag vermelha pequena", "text": "Primeira linha\nSegunda linha [[destaque]]", "cite": "Fonte: …|YYYY.MM.DD"}}
    ]},
    {"type": "clip", "url": "https://www.youtube.com/watch?v=…", "channel": "Canal Original", "official": true,
     "in": 147.1, "out": 166.75, "speaker_en": "David Soria Parra", "speaker_zh": "Cocriador do MCP",
     "event": "Entrevista Oficial Anthropic", "date": "2025.12.11", "highlight": ["palavra chinesa que ficará amarela"],
     "subs": [{"t": [0.0, 3.56], "en": "Fala original do palestrante", "zh": "Tradução taiwanesa"}]},
    {"type": "explainer", "broll": ["…"], "lines": [
      {"en": ["Parte um,", "Parte dois."], "zh": ["Legenda um", "Legenda dois"], "broll": ["palavra-chave específica desta linha"], "card": {…}}
    ]},
    {"type": "outro", "tag": "Comente", "question": "Grande pergunta primeira linha\nSegunda linha [[destaque]]?", "broll": ["…"], "lines": [{"en": "…", "zh": "…"}]}
  ],
  "cover": {"template": "E", "ep": "EP.13", "kicker": "…", "title": "…\n[[…]]", "subtitle": "…", "frame": {"clip": 1, "t": 4.0}}
}
  • en/zh podem ser string ou lista de mesmo tamanho (lista = mesmo texto de narração dividido em várias legendas, tempo dividido proporcionalmente ao número de caracteres do inglês).
  • card persiste dentro do mesmo segmento até ser substituído; "card": false o remove.
  • Se zh for muito longo, será quebrado automaticamente nas vírgulas ","; quebrar manualmente com \n. Destaques com [[ ]] ou lista hl.
  • cover.frame: qual clipe original e qual segundo (quadro 16:9 original) usar na capa. Outros campos do template E (photo_side, visual_pos, brightness, tag) conforme covers/README.md.
  • Nome chinês: se o palestrante tiver nome traduzido comum (ex.: 黃仁勳, 馬斯克), usar esse; senão, usar cargo (ex.: "Cocriador do MCP"), não criar transliteração.

Saída (OUT)

<name>.mp4, preview_720p.mp4 (para Josh ver no chat), contact_sheet.jpg (um quadro de cada cena), credits.json, timeline.json, cover_reel.png/cover_post.png, cover_spec.json.

Checklist antes de entregar

  1. Verificar contact_sheet.jpg visualmente: sobreposição de cartões, legendas, tags de áudio original, se estão ocultos pela interface do IG (topo 220px, inferior 380px, direita 130px).
  2. Legendas dos clipes originais: inglês corresponde à fala original, chinês sem distorcer significado; palavras com transcrição duvidosa marcar para Josh ouvir.
  3. Usar ffprobe para verificar duração e tamanho; proporção de áudio original conferir na última linha do build.py.
  4. credits.json: interview_clips cada um tem URL, canal, tempos de início/fim; confirmar que são canais oficiais.
  5. Reportar ao bot principal: caminho do arquivo, duração, tamanho, fontes do áudio original e nota de licenciamento, decisões que Josh precisa tomar. Não publicar.

Limitações Conhecidas

  • Nesta máquina, faster-whisper: modelos *.en (small.en etc.) produzem caracteres inválidos; usar multilíngue medium/small; incompatibilidade com PyAV, áudio alimentado via numpy (scripts já tratam). O mesmo trecho com modelos diferentes pode omitir palavras; verificar cruzadamente frases-chave.
  • YouTube --download-sections retorna 403, então baixar vídeo inteiro (entrevistas longas em 1080p podem ter centenas de MB, cache em cache/sources/, pode deletar após uso).
  • Sem GPU: vídeo de 1 minuto leva cerca de 2 minutos para renderizar, 3 minutos leva 6 a 8 minutos.
  • Resultados de palavras-chave no Pexels às vezes imprecisos; verificar contact sheet e trocar palavra-chave ou usar image/file.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

bounce12340/josh-video-skills

收到「做一支影片/Reel」時先用:判斷影片類型、轉給對應的影片 skill,套用共用本家規則並交給事實編輯。只做草稿,不發文。

bounce12340/josh-video-skills

用 OpenMontage(開源 AI 影片製作流水線,<SKILLS_DIR>/OpenMontage)做 Josh 的影片時的「本家規則」轉接層。適用:長片剪成多支短片(clip-factory)、真實螢幕錄製教學(screen-demo)、翻譯配音(localization-dub)、Podcast 轉影片(podcast-repurpose)、「照這支參考影片做」(reference video 分析)、無旁白紀錄片蒙太奇(documentary-montage),以及幫 stock-footage-reel 加抓 NASA/國會圖書館/NARA/Archive.org 老片。觸發語:「用 OpenMontage」、「長片切短片」、「照這支 Reel 做」、「翻譯配音」、「螢幕教學影片」。

bounce12340/josh-video-skills

用 Playwright 錄「公開網頁」的操作畫面(捲動、滑過、點連結、高亮重點、章節卡),輸出 1080x1920 直式 mp4,當 Reel 的工具/網站導覽素材。觸發語:「錄一段網頁操作」「網站導覽素材」「螢幕錄影素材」「screen record」。只錄公開頁面,不登入、不發文。

bounce12340/josh-video-skills

「真實素材剪輯」直式短影音(AYi @ayi_ainotes 那種紀錄片風):照口播稿每一句,自動搜尋並下載免費可商用素材(Pexels、Mixkit Free、Wikimedia Commons),加上洋紅調的 1950 到 70 年代 Prelinger 公有領域老片,硬切剪輯,燒上雙語字幕(繁中+英文,重點字金色),左上固定標題,ElevenLabs 配音,暗色合成器配樂,片尾金句卡加出處小字,再用 B 剪報 Vox 樣板出封面。觸發語:「做一支真實素材剪輯」、「stock footage reel」、「AYi 風格」、「素材庫剪輯」。

Habilidades Relacionadas