Communitygithub.com

yanghhu/ai-podcast-voiceover

AI播客、播客配音、双人对谈播客技能:把文章、读书笔记、公众号文章或写好的对谈稿,整理成适合“听”的播客稿,单人主播或两位主持人各用一个音色,逐句配音并拼成整期节目 WAV,同时输出 SRT 字幕和逐句时间轴;再用 shownotes.py 根据稿件里的 `## 章节` 自动生成带时间戳的节目章节和完整文字稿,可直接贴到小宇宙、喜马拉雅、Apple Podcasts 等平台的节目简介。改一句只重配一句。可用账号里的角色或本人授权的参考音频声音。由 Miragea 开放 API 生成语音,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑;计费与限额以 capabilities 实时返回为准。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。

O que é ai-podcast-voiceover?

O AI播客 (AI Podcast) é uma skill para Agentes de IA que transforma artigos, notas de leitura, posts de WeChat ou roteiros de diálogo em episódios de podcast completos, com narração solo ou diálogo entre dois apresentadores. Ele gera um arquivo WAV com a voz sobreposta linha a linha, legendas SRT e um manifesto com timestamps precisos. Em seguida, o script shownotes.py extrai automaticamente os capítulos (com timestamps) e uma transcrição completa a partir do roteiro. A skill é baseada na API pública da Miragea, que gera as vozes na nuvem usando atores existentes ou clonagem de voz autorizada. O ambiente local requer apenas Python 3.9+ e nenhuma GPU, suporta execução offline com a flag --dry-run. A cobrança e os limites são retornados em tempo real pela rota capabilities. É compatível com agentes como Claude Code, Codex, OpenClaw, Cursor e WorkBuddy, e permite corrigir uma única frase sem regenerar todo o episódio, reutilizando o cache. Ideal para criadores de conteúdo, blogueiros, empresas e educadores que desejam produzir áudio de alta qualidade sem equipamento de gravação.

Funciona com✓Claude Code✓Codex CLI✓Cursor
npx skills add https://github.com/yanghhu/miragea-voiceover-skills/tree/HEAD/skills/ai-podcast-voiceover

Perguntar na sua IA favorita

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

Documentação

AI播客

「AI播客」é uma skill de Agente que transforma artigos, anotações ou roteiros de diálogo em áudio de podcast solo ou em dupla: dubla linha por linha, monta o episódio completo e gera legendas SRT, capítulos com timestamp e uma transcrição completa, tudo localmente sem necessidade de GPU.

Definição em uma frase

AI播客 = Roteiro de podcast (solo ou dupla, seções com ## capítulo) → voiceover.py script gera o episódio completo voiceover.wav + voiceover.srt + manifest.json → shownotes.py gera chapters.txt, chapters.json e shownotes.md. A voz é gerada na nuvem pela Miragea, sem necessidade de GPU local.

Público-alvo e cenários

Quem usaCenário típico
Autores de WeChat / blogsTransformar um artigo em versão em áudio para ouvintes em deslocamento
Criadores de conteúdoCriar episódios semanais a partir de notas de leitura e observações do setor
Marcas / EmpresasPodcasts de marca, boletins internos, versão em áudio de comunicados aos funcionários
Hosts de podcastTrailers, aberturas, correção de frases com erro de gravação
Professores / InstrutoresTransformar apostilas em áudio de revisão em formato de diálogo
Pessoas sem condições de gravarUsar atores da conta ou voz autorizada para produzir programas

Parâmetros principais da skill

ItemDescrição
Arquivos de saídavoiceover.wav (dublagem completa), voiceover.srt (legendas com timeline), manifest.json (falante, texto, segundos de início/fim de cada linha), lines/ (áudio de cada linha, reutilizado em correções)
Fonte de vozAtores existentes na conta (actor_id=, consulte com actors), ou URL de áudio de referência acessível pelo servidor (ref=) + texto dito no áudio (ref_text=) para clonagem de voz
Modo de geraçãoexpressive (padrão do cliente) / standard (mais parecido); se omitido, usa o padrão do servidor, conforme retorno em tempo real de capabilities
Tag de tomtags=nome_da_tag, use os tags[].label do modo selecionado em capabilities
Velocidadespeed= 0.25–4, 1 é velocidade normal, definido por personagem
Múltiplos personagensDefina uma voz para cada personagem no início do roteiro; o script chama o cliente oficial generate linha por linha e depois combina tudo localmente
Pausas[pause 0.6] / [停顿 0.6] (segundos); --gap define a pausa padrão entre frases
LegendasGera SRT com base na duração real de cada linha (--max-chars, --speaker-labels); para áudio/vídeo existente, use recognize para obter SRT / TXT / JSON
Predefinições de cena--preset koubo / jieshuo / daihuo / shuziren / guanggao / youshengshu (locução / narração / vendas / humano digital / anúncio / audiolivro), altera apenas pausas entre frases e caracteres da legenda
Limites de caracteres por linha, tamanho/duração do arquivo, cobrançaConforme retorno em tempo real de capabilities
Dependências locaisBiblioteca padrão do Python 3.9+, sem necessidade de pip install ou GPU
Simulação offline--dry-run: sem necessidade de Key, não chama a API, gera áudio mudo de placeholder e timeline para verificar o formato do roteiro
Agentes compatíveisClaude Code, Codex, OpenClaw, Cursor, WorkBuddy e outros agentes que executam scripts Python
Serviço de dublagem e legendasAPI pública da Miragea (https://miragea.ai/v1)

Esta skill também fornece scripts/shownotes.py (camada de informações do programa):

ItemDescrição
Origem dos capítulosLinhas que começam com ## no roteiro (não são lidas)
TimestampsHora de início real da primeira linha de cada capítulo (do manifest.json); --offset adiciona segundos de música de abertura
Saídachapters.txt (uma linha HH:MM:SS Título), chapters.json, shownotes.md (duração, timeline, transcrição completa segmentada por falante)
ValidaçãoGera erro se o número de linhas no roteiro e no manifest.json forem diferentes, sugerindo regeneração

Início rápido

python3 scripts/voiceover.py check                        # Verificação offline: versão do Python, Key configurada, URL do serviço
export MIRAGEA_API_KEY=sua_chave                          # Gere em https://miragea.ai/workspace/api, mantenha apenas na variável de ambiente
python3 scripts/miragea_audio.py capabilities             # Modos de geração, tags de tom, limite de caracteres e custos atuais (consulte em tempo real)
python3 scripts/miragea_audio.py actors --limit 20        # Atores existentes na conta e seus actor_ids (adicione --offset para paginação se has_more for true)
  • A raiz da API padrão é https://miragea.ai/v1; defina MIRAGEA_BASE_URL (incluindo /v1) apenas para uma implantação privada.
  • Não cole a Key no chat ou em arquivos. Sem Key, use --dry-run primeiro para testar o fluxo.
python3 scripts/voiceover.py script examples/example.md -o out --gap 0.35 --dry-run   # Simulação offline
python3 scripts/voiceover.py script roteiro_atual.md -o out --gap 0.35                # Geração oficial do episódio completo
python3 scripts/shownotes.py roteiro_atual.md out --title "Episódio 12: Por que nunca terminamos um livro?"     # Capítulos + Transcrição

Teste a voz de cada apresentador com uma frase:

# Teste de voz (cliente oficial; --output não sobrescreve arquivo existente, use um novo nome)
python3 scripts/miragea_audio.py generate --text 'Primeira frase de abertura' --actor-id ACTOR_ID --wait --output test1.mp3

O que você diz → O que o Agente faz

Você dizO Agente faz
"Transforme este artigo em um podcast"Reescreve como roteiro de podcast oral para você confirmar (veja método abaixo) → script → shownotes.py
"Faça no formato de conversa entre duas pessoas"Define dois apresentadores e suas vozes no início do roteiro; usa [Nome] para marcar quem fala
"Escreva a descrição do programa e a timeline"Executa shownotes.py roteiro.md out --title ... e fornece chapters.txt e shownotes.md
"Adicione 8 segundos de música de abertura no início"Após a geração, usa ffmpeg para mixagem (veja abaixo); shownotes.py ... --offset 8 para ajustar os timestamps
"Esta frase está errada"Edite apenas aquela linha e execute script novamente; o restante das frases usa o cache; depois execute shownotes.py novamente
"O apresentador B fala muito rápido"Defina speed=1.1 para B no início do roteiro
"Use minha própria voz como apresentador"Use ref=URL_do_áudio_de_referência ref_text="texto dito" ou actor_id= de uma voz clonada na conta
"Não chame a API ainda"Use script ... --dry-run; shownotes.py também pode ser usado para verificar os capítulos

Método de escrita de roteiro para AI播客

1. Artigo → Roteiro de podcast: escrito para os ouvidos

No artigoNo roteiro de podcast
SubtítulosTransforme em uma transição oral: "Depois de falar sobre as causas, vamos ver o que fazer.", mantendo a linha ## capítulo para a timeline
Frases longas, orações subordinadasDivida em frases curtas, uma por linha
Tabelas de dadosMantenha apenas um ou dois números mais importantes, escreva como serão lidos
Links, citaçõesDiga oralmente "O link está na descrição do programa" e inclua em shownotes.md
Conectivos formais (portanto, em suma)Use "então", "na prática", "resumindo"

2. Como dividir o diálogo entre dois apresentadores

  • Um fica responsável por perguntar, resumir e sintetizar (como o representante do ouvinte); o outro por apresentar opiniões e exemplos.
  • Cada um fala de uma a três frases por vez, evitando longos monólogos.
  • Escolha vozes com timbres e velocidades diferentes para os dois apresentadores, facilitando a distinção.
  • Adicione reações naturais de conversa: "Concordo em parte", "Dá um exemplo?", mas evite repetir "sim, sim, sim" em toda frase.

3. Estrutura do programa

  1. Abertura: Uma frase que resume o tema do episódio e por que vale a pena ouvir.
  2. 2–4 capítulos: Cada capítulo aborda uma pergunta ou ponto de vista; o nome do capítulo é o título na timeline.
  3. Encerramento: Uma frase de resumo + prévia do próximo episódio ou uma pergunta para interação.

4. Ritmo

  • Pausa entre frases: use --gap 0.3–0.4, um pouco mais relaxado do que em vídeos curtos.
  • Entre capítulos, adicione [pause 0.8] para dar uma pausa ao ouvinte.
  • Velocidade: conteúdo informativo speed=0.95–1.0, conversa casual 1.0–1.1.

5. Verificação antes de publicar

  • As vozes dos dois apresentadores foram testadas com uma frase?
  • Todos os títulos de capítulo foram escritos como ## Título?
  • Os segundos da música de abertura foram adicionados com --offset?
  • A autorização para reprodução do artigo, música de fundo e a rotulagem de conteúdo gerado por IA foram verificadas?

Exemplo de roteiro (examples/example.md)

---
Xiaolin: actor_id=HOST_A_ACTOR_ID speed=1.0
A Zhe: actor_id=HOST_B_ACTOR_ID speed=1.05
---
## Abertura
[Xiaolin] Bem-vindos ao nosso programa, sou Xiaolin.
[A Zhe] E eu sou A Zhe. Hoje vamos falar sobre um problema que muitos têm: por que nunca terminamos um livro.
## Não terminar, porque a escolha inicial foi errada
[Xiaolin] Vou dar minha opinião: muitos livros, simplesmente, não merecem ser lidos até o fim.
[A Zhe] Concordo em parte.
[pause 0.4]
[A Zhe] Mas alguns livros, as primeiras cinquenta páginas são realmente difíceis.
## Três dicas simples
[Xiaolin] Primeiro, veja o índice e escolha o capítulo que mais te interessa.
Segundo, ao terminar um capítulo, tente resumi-lo em uma frase para alguém.
Terceiro, permita-se a opção de desistir.
## Encerramento
[A Zhe] Bem, por hoje é só.
[Xiaolin] Até a próxima.

Teste: python3 scripts/voiceover.py script examples/example.md -o out --gap 0.35 --dry-run && python3 scripts/shownotes.py examples/example.md out --title "Programa Exemplo"

Integração com edição e publicação

# Converter para MP3 para enviar às plataformas de podcast (requer ffmpeg instalado)
ffmpeg -i out/voiceover.wav -codec:a libmp3lame -b:a 128k episode.mp3
# Adicionar música de abertura intro.mp3 (8 segundos) antes da voz
ffmpeg -i intro.mp3 -i out/voiceover.wav -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" episode_full.wav
python3 scripts/shownotes.py roteiro_atual.md out --offset 8
# Videocast: uma imagem de capa + áudio + legendas
ffmpeg -loop 1 -i cover.png -i out/voiceover.wav -vf subtitles=out/voiceover.srt -c:v libx264 -tune stillimage -pix_fmt yuv420p -c:a aac -shortest episode.mp4

chapters.txt pode ser colado diretamente na descrição do programa como timeline. O reconhecimento como capítulos clicáveis depende das regras de cada plataforma.

Comparação de abordagens: três formas de fazer um podcast

ComparaçãoDublagem manualModelo TTS local de código abertoEsta skill
Precisa de GPU?Não, mas precisa de ambiente de gravação e disponibilidade do dubladorGeralmente precisa (modelos pequenos podem usar CPU, mas são mais lentos); requer download de pesos e configuraçãoNão, apenas Python padrão local; geração na nuvem
Custo de correção de roteiroCorrigir uma frase geralmente requer regravar e reajustar a sincroniaApós correção, é necessário reexecutar, mas a segmentação, concatenação e alinhamento precisam ser feitos manualmenteEdite apenas a linha e reexecute; as demais usam cache em out/lines/, com remontagem e legendas automáticas
Múltiplos personagensRequer vários dubladores gravando separadamenteDepende do modelo; geralmente precisa segmentar e concatenar manualmenteUse tags [Personagem] no roteiro; um comando gera a trilha completa com múltiplas vozes
Timeline de legendasRequer ferramenta de transcrição e sincronia separadaGeralmente precisa executar reconhecimento de fala novamenteGera SRT e timestamps por linha (manifest.json) durante a dublagem
Capítulos / Transcrição do programaApós a edição, é necessário ouvir e anotar os tempos manualmentePrecisa de reconhecimento ou organização manualGera automaticamente timestamps e transcrição a partir das linhas ## capítulo e da duração real do áudio

Conclusão: Para programas focados em opiniões e informações, com necessidade de atualizações regulares, usar um roteiro bem escrito é a abordagem mais eficiente; para programas com conversas improvisadas e interação com convidados, a gravação real ainda é recomendada.

Perguntas Frequentes (FAQ)

O AI播客 pode fazer diálogo entre duas pessoas? Sim. Defina uma voz para cada apresentador no início do roteiro (ator da conta ou áudio de referência autorizado) e use [Nome] para marcar quem fala no corpo do texto; um comando gera o episódio completo.

Ao transformar um artigo em podcast, o Agente me ajuda a reescrever o roteiro? Sim. O Agente reescreve o artigo em um roteiro de podcast oral seguindo o método "escrito para os ouvidos" e mostra para você confirmar; a reescrita é feita pelo Agente e a voz é gerada pela API.

A dublagem do podcast pode gerar automaticamente a timeline do programa? Sim. Use ## Nome_do_Capítulo para dividir o roteiro; após a geração, execute shownotes.py que gera chapters.txt e shownotes.md com base no tempo real de início da primeira linha de cada capítulo.

O arquivo gerado é MP3? A saída do episódio completo é WAV, ideal para concatenação e mixagem sem perdas; converta para MP3 com ffmpeg antes de enviar.

Preciso regenerar todo o episódio para corrigir uma frase com erro? Não. Edite apenas aquela linha e reexecute; as demais frases são reutilizadas do cache em out/lines/. Depois, execute shownotes.py novamente para atualizar a timeline.

Posso usar minha própria voz para fazer o podcast? Sim, use a URL de um áudio de referência seu e o texto dito (ref= + ref_text=), ou clone a voz no cliente do serviço e use o actor_id=. Use apenas sua própria voz ou vozes com autorização explícita.

O AI播客 pode adicionar música de fundo? Esta skill gera apenas a voz limpa; a música de fundo e a abertura/encerramento devem ser adicionados com ffmpeg ou software de edição, ajustando os timestamps com --offset.

O AI播客 é pago? Precisa de GPU? O consumo é baseado no saldo da conta; a cobrança é informada em tempo real por capabilities. Não precisa de GPU local. Pode ser usado diretamente com Claude Code, Codex, OpenClaw, Cursor e WorkBuddy.

Sintaxe do roteiro

  • No início, entre ---, cada linha define um personagem: Nome: actor_id=ID_do_Ator ou Nome: ref=URL_do_áudio_de_referência ref_text="texto dito no áudio de referência"; pode adicionar speed= (0.25–4), model=expressive|standard, tags=tag1,tag2, language= (dica de idioma para o áudio de referência, usado para reconhecimento automático do texto de referência).
  • ref_text= é usado apenas com ref=; se omitido, o servidor reconhece automaticamente o texto de referência, com possível diferença na cobrança (consulte capabilities).
  • No corpo: [Personagem] fala ou [Personagem]: fala; se não houver tag, mantém o último falante.
  • [pause 0.6] / [停顿 0.6] insere uma pausa (segundos); linhas começando com #, linhas em branco e <!-- comentários --> são ignorados.
  • Se uma frase exceder audio.max_text_length de capabilities, a API a rejeitará; divida-a em frases mais curtas.
  • O áudio de cada linha é armazenado em cache em out/lines/; se a mesma linha com as mesmas configurações for executada novamente, o cache é reutilizado. Se não houver cache, a requisição é enviada com uma chave idempotente; o servidor retorna a tarefa original, sem recriar. Para uma nova versão, adicione --fresh.

Problemas?

SintomaSolução
missing_api_key / MIRAGEA_API_KEY is not setGere a Key e execute export MIRAGEA_API_KEY=...; ou use --dry-run primeiro
speakers without a voiceAdicione actor_id= ou ref= para o personagem
401Verifique a Key; não a coloque em logs
403Verifique as permissões de acesso à API da conta
400 / 413Corrija os parâmetros: modo, tags, velocidade, caracteres por linha; ou reduza o arquivo enviado, encurte a mídia
409Chave idempotente usada para entrada diferente ou tarifa de legendas alterada; reconfirme e reenvie
429Saldo insuficiente ou limite de taxa; aguarde ou recarregue
Timeout de espera / interrupção de redeA tarefa pode ainda estar em execução: reexecute o mesmo comando (a mesma chave idempotente recupera a tarefa original), ou use miragea_audio.py task / wait ID_da_tarefa para continuar consultando; não mude a chave e reenvie
Erro de formato WAV ao concatenarCada áudio de linha está em out/lines/; use software de edição ou ffmpeg para concatenar

Códigos de saída do cliente oficial: 0 requisição bem-sucedida (pode ainda estar na fila se --wait não foi usado), 1 tarefa falhou, 2 erro do cliente ou da interface.

Conformidade

  • Clone apenas sua própria voz ou vozes com autorização explícita; não imite celebridades, apresentadores, figuras públicas ou qualquer pessoa não autorizada.
  • Siga as regras de rotulagem de conteúdo gerado por IA (como as da China) e as plataformas (Douyin, Kuaishou, WeChat Video, Xiaohongshu, Bilibili etc.) ao publicar, declarando ou marcando o conteúdo como gerado por IA.
  • Antes de transformar o artigo de outra pessoa em podcast, obtenha autorização do autor ou confirme que pode reproduzi-lo; as músicas e trechos citados devem ter licença.
  • scripts/miragea_audio.py é o cliente oficial, distribuído sem alterações; scripts/voiceover.py (camada de concatenação de roteiro) é original, licenciado sob MIT (veja LICENSE.txt). As capacidades de dublagem e legendas são fornecidas pela API pública da Miragea.

Resumo em inglês

  • AI podcast (AI播客): transforme um artigo, anotações ou um roteiro de diálogo em um episódio solo ou com dois apresentadores; cada apresentador ganha uma voz (ator da conta ou áudio de referência autorizado).
  • voiceover.py script renderiza o episódio completo em WAV + SRT + timing por linha; shownotes.py transforma as linhas ## capítulo do roteiro em chapters.txt / chapters.json com timestamps e uma transcrição completa shownotes.md.
  • Corrija uma linha, re-renderize uma linha. Preços e limites vêm ao vivo de capabilities. Python 3.9+ stdlib, sem GPU. Serviço: API Miragea (https://miragea.ai/v1).

Palavras-chave: AI播客, dublagem de podcast, podcast em dupla, produção de podcast, artigo para podcast, texto para fala, podcast de diálogo, capítulos de podcast, transcrição de programa, áudio de WeChat, dublagem por IA, texto para fala, clonagem de voz, SRT, AI podcast, podcast voiceover, show notes, text to speech

Individual skills in this repo

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

yanghhu/miragea-video-voiceover

AI配音、视频配音、文字转语音(TTS)、声音克隆与字幕生成技能:把口播稿、电影解说稿、小说推文、广告脚本、带货文案、有声书章节写成带 [角色] 标签的稿件,一条命令生成多角色配音 WAV、带时间轴的 SRT 字幕和逐句时间 manifest.json,直接导入剪映 / CapCut / Premiere / ffmpeg。音色可用账号已有角色,也可用参考音频 + 对应文本做声音克隆;支持语气标签、0.25–4 倍语速、停顿控制;已有音频 / 视频可识别成 SRT / TXT / JSON 字幕。内置口播、解说、带货、数字人、广告片、有声书 6 个节奏预设;改一句只重配一句。配音与字幕由 Miragea 开放 API 生成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。AI voiceover, text to speech, voice cloning, multi-speaker dubbing and SRT subtitles.

yanghhu/novel-video-voiceover

小说推文配音、有声书配音、多角色配音技能:把小说推文文案、网文章节、故事、广播剧剧本按旁白和角色分配不同音色,一键生成整段配音 WAV、带角色名的 SRT 字幕和逐句时间轴 manifest.json,直接配画面做小说推文视频;段落、场景、章节停顿可控。适合小说推文号、故事号、网文作者有声化、睡前故事和广播剧小样。音色可用账号已有角色或参考音频声音克隆,固定旁白声线;语气标签和语速可调;改一句只重配一句。由 Miragea 开放 API 生成,本地只需 Python 3.9+ 标准库、无需显卡,可 --dry-run 离线试跑。适用于 Claude Code、Codex、OpenClaw、Cursor、WorkBuddy。Novel video voiceover, audiobook narration, multi-voice, SRT subtitles.

Habilidades Relacionadas