Formulário de contato

Nome

E-mail *

Mensagem *

Imagem

Pipeline de Vídeos Automáticos com IA + YouTube - Código Python - Parte 3

Pipeline de Vídeos Automáticos com IA + YouTube - Código Python - Parte 3

Publicado por em


@CanalQb no YouTube


@CanalQb

Pipeline de Vídeos Automáticos com IA + YouTube — Script Python — Parte 3


Parte 3 de 3 — render.py + setup_oauth.py
Nas Partes 1 e 2 você viu o script GAS que organiza os vídeos no Drive e o workflow YAML que agenda tudo no GitHub Actions. Agora chegam os dois scripts Python que fecham o ciclo: o render.py, que edita o vídeo, gera a copy com Gemini IA e publica no YouTube, e o setup_oauth.py, que autentica sua aplicação com o Google e gera o token que o workflow usa para operar indefinidamente sem login manual.

ℹ️ Nota Técnica: Os scripts fornecidos são para automação de conteúdo próprio e fins educacionais. Teste sempre em ambiente isolado antes de usar em canais reais. O @CanalQb não se responsabiliza por suspensões ou danos decorrentes de uso fora dos Termos de Serviço do YouTube ou das APIs do Google.


O que fazem o render.py e o setup_oauth.py no pipeline de vídeos automáticos?

O render.py é o executor central do pipeline: lê a fila da planilha Google Sheets, baixa o vídeo do Drive, edita com MoviePy para formato 9:16, gera título, descrição e hashtags via Gemini IA e faz o upload para o YouTube com retry automático. O setup_oauth.py é executado apenas uma vez, manualmente, para autenticar sua aplicação com o Google e gerar o OAUTH_REFRESH_TOKEN que o workflow YAML usa para que o render.py acesse o YouTube indefinidamente sem login repetido.

Esses dois scripts são o que o run_notebook.yml da Parte 2 executa a cada ciclo. Sem eles, o workflow YAML tem motor mas não tem o que rodar. E sem o token gerado pelo setup_oauth.py, o render.py não consegue publicar nada no YouTube — a autenticação é o primeiro passo antes de qualquer execução automática.

Se você ainda não leu a Parte 1 (script GAS) e a Parte 2 (workflow YAML), recomendo começar por lá — o Drive, a planilha e os secrets configurados nelas são os recursos que esses scripts consomem.


Como o setup_oauth.py gera o token que libera o acesso permanente ao YouTube?

O setup_oauth.py inicia um fluxo OAuth 2.0 com as credenciais da sua aplicação Google Cloud, abre o navegador para você autorizar o acesso uma única vez, e salva o OAUTH_REFRESH_TOKEN resultante. Esse token não expira como os access tokens normais — ele permite que o render.py se reconecte ao YouTube automaticamente em cada execução do workflow, sem precisar de login manual.
1
Pré-requisito: credenciais OAuth no Google Cloud Console

Antes de rodar o setup_oauth.py, você precisa de um projeto no Google Cloud com a YouTube Data API v3 habilitada e um par de credenciais OAuth 2.0 criado em Credenciais → ID do cliente OAuth. O tipo deve ser "Aplicativo de área de trabalho". O Client ID e o Client Secret gerados aqui são os mesmos secrets OAUTH_CLIENT_ID e OAUTH_CLIENT_SECRET que você cadastrou no repositório GitHub na Parte 2.

2
Execução única e local do setup_oauth.py

O script é executado uma única vez na sua máquina local — nunca no GitHub Actions. Ele usa o Client ID e o Client Secret para iniciar o fluxo OAuth, abre o navegador para você autorizar o acesso à sua conta YouTube e captura o código de retorno automaticamente. Aqui no @CanalQb, o processo inteiro leva menos de 2 minutos da primeira vez.

3
Geração e cópia do OAUTH_REFRESH_TOKEN

Após a autorização, o script imprime o OAUTH_REFRESH_TOKEN no terminal. Você copia esse valor e cadastra como secret no repositório GitHub — exatamente como descrito na Parte 2. A partir daí, o render.py usa esse token para se autenticar com o YouTube em cada execução do workflow, sem nenhuma interação manual.

💡 Dica @CanalQb: O refresh token não tem prazo de expiração definido — mas o Google pode revogá-lo se a aplicação ficar mais de 6 meses sem uso, se você trocar a senha da conta ou se revogar o acesso manualmente no painel de segurança do Google. Nesses casos, basta rodar o setup_oauth.py novamente e atualizar o secret no GitHub.

Como o render.py executa o pipeline do início ao fim a cada ciclo?

O render.py funciona como orquestrador linear: lê a planilha e pega o primeiro vídeo com status pendente, baixa o arquivo do Drive com verificação de integridade, edita para formato 9:16 com MoviePy, envia o tema para a API Gemini e recebe título, descrição e hashtags em JSON, faz o upload para o YouTube com chunked resumable e retry automático em erros de servidor, e atualiza a planilha com o link publicado. Cada etapa só avança se a anterior foi bem-sucedida.
1
Leitura da fila na planilha Google Sheets

O script conecta via conta de serviço e lê a primeira linha com status pendente na planilha configurada na Parte 1. Nenhum vídeo é processado duas vezes — o campo de status é atualizado imediatamente ao iniciar o processamento, evitando duplicatas mesmo que o workflow seja disparado manualmente durante uma execução automática.

2
Download do Drive com verificação de integridade

O arquivo é baixado em diretório temporário e tem o tamanho verificado antes de prosseguir. Se o arquivo vier corrompido ou incompleto — o que acontece mais do que parece em conexões instáveis — o script registra o erro na planilha e interrompe sem comprometer o restante da fila. Esse checkpoint evita uploads de vídeos silenciosamente corrompidos no YouTube.

3
Edição automática com MoviePy

O script remove os primeiros 3 segundos de intro, recorta o vídeo para formato vertical 9:16 centralizado e normaliza o áudio. Tudo em código — sem abrir nenhum editor. O arquivo editado é salvo em diretório temporário e usado diretamente no upload. O original no Drive não é alterado.

4
Geração de copy com Gemini IA

O script envia o tema do vídeo para a API Gemini com um prompt estruturado e recebe um JSON com título viral (até 70 caracteres), descrição com CTA direcionando para o blog configurado no secret URL_DO_BLOG_BLOGGER, e lista de hashtags otimizadas. Nenhuma linha de copy é escrita manualmente — a IA gera tudo a cada ciclo com base no contexto do vídeo.

5
Upload para o YouTube com retry automático

O envio usa upload resumable em chunks de 10MB. Em erros de servidor (500, 502, 503, 504), o script aguarda 5 segundos e retenta automaticamente sem perder o progresso do upload. Após a publicação bem-sucedida, o link do vídeo é gravado na planilha e os arquivos temporários são deletados.


Por que chunksize=-1 no MediaFileUpload falha silenciosamente em vídeos grandes?

Usar chunksize=-1 no MediaFileUpload da YouTube Data API v3 faz o envio em bloco único — funciona para arquivos abaixo de 200MB em conexões estáveis, mas falha silenciosamente em arquivos maiores ou em conexões instáveis sem lançar exceção clara. O script do @CanalQb resolve isso com chunks de 10MB e retry automático em erros de servidor, garantindo que o upload retome do ponto onde parou em vez de recomeçar do zero.
# render.py — módulo de upload para YouTube # Padrão resumable com retry — otimizado para leitores do canalqb.com.br from googleapiclient.errors import HttpError from googleapiclient.http import MediaFileUpload import time def upload_youtube(video_path, title, description, tags, yt_client): body = { "snippet": { "title": title, "description": description, "tags": tags, "categoryId": "28" }, "status": { "privacyStatus": "public", "selfDeclaredMadeForKids": False } } media = MediaFileUpload( video_path, chunksize=10 * 1024 * 1024, # 10MB por chunk — nunca use chunksize=-1 resumable=True, mimetype="video/mp4" ) req = yt_client.videos().insert( part="snippet,status", body=body, media_body=media ) resp = None while resp is None: try: _, resp = req.next_chunk() except HttpError as e: if e.resp.status in [500, 502, 503, 504]: time.sleep(5) # aguarda e retenta sem perder progresso else: raise return resp["id"]
ℹ️ Esse padrão de retry com upload resumable resolve mais de 80% dos erros de upload em produção contínua — especialmente em execuções noturnas do GitHub Actions, quando a rede dos data centers oscila com mais frequência do que nos horários de pico diurno.

O que está incluído nos scripts Python disponíveis para compra?

Não são snippets isolados. São dois arquivos Python estruturados em módulos independentes, comentados em PT-BR e testados nos canais do @CanalQb antes de serem disponibilizados. Cada função tem responsabilidade única — você consegue entender, adaptar e expandir sem precisar ser sênior em Python.

render.py — orquestrador completo com leitura de fila, download, edição MoviePy, geração Gemini IA, upload YouTube e limpeza de temporários.
setup_oauth.py — autenticação OAuth 2.0 com geração do refresh token para acesso permanente ao YouTube sem login repetido.
requirements.txt — todas as dependências versionadas para Python 3.10+, prontas para instalar com um comando.
Módulo Drive — download com verificação de integridade e fallback para evitar uploads de arquivos corrompidos.
Módulo Gemini IA — prompt estruturado para geração de título viral, descrição com CTA e hashtags em JSON parseável.
Módulo Upload — chunked resumable de 10MB com retry automático em erros 5xx, sem perder progresso do envio.
Guia de configuração — passo a passo para rodar o setup_oauth.py, copiar o token e configurar os secrets no GitHub.
Compatível com Partes 1 e 2 — usa a mesma planilha do GAS e é chamado diretamente pelo run_notebook.yml sem adaptação.

Quer o render.py e o setup_oauth.py completos agora?

Dois scripts Python prontos para produção, requirements.txt, guia de configuração OAuth e suporte disponível na Hotmart.

@CanalQb — Comprar na Hotmart Produto ID T105334652V — Hotmart

Para quem vale a pena adquirir o render.py e o setup_oauth.py?

Se você já tem o script GAS organizando vídeos no Drive e o workflow YAML agendando execuções no GitHub, esses dois scripts são a última peça. Aqui no @CanalQb, validamos que o maior gargalo de quem monta pipelines pela metade é exatamente a autenticação OAuth — que parece complicada mas leva menos de 2 minutos com o setup_oauth.py pronto.

Criadores Solo

Publica no ritmo de uma equipe sem abrir editor de vídeo. O render.py edita e sobe tudo enquanto você faz outra coisa.

Canais Dark

Opera múltiplos canais com uma única base de código — só muda o token OAuth e o ID da planilha por canal.

Afiliados

Distribui conteúdo para YouTube com CTA automático para o blog em cada descrição — tráfego passivo sem esforço adicional.

Agências

Entrega volume de publicações para clientes sem aumentar equipe — os scripts viram parte do produto oferecido.


O que o render.py e o setup_oauth.py entregam na prática?

  • ✔ Autenticação OAuth 2.0 com geração de refresh token permanente (setup_oauth.py)
  • ✔ Leitura de fila na planilha sem risco de processar o mesmo vídeo duas vezes
  • ✔ Download do Drive com verificação de integridade antes de qualquer edição
  • ✔ Edição automática 9:16 com remoção de intro e normalização de áudio via MoviePy
  • ✔ Geração de copy completa via Gemini IA — título, descrição com CTA e hashtags
  • ✔ Upload resumable em chunks de 10MB com retry automático em erros de servidor
  • ✔ Atualização da planilha com link publicado e limpeza de temporários ao final
  • ✔ Integração direta com o GAS (Parte 1) e o run_notebook.yml (Parte 2)

Quer o sistema completo das três partes integrado?

Se você quer pular a configuração parte por parte e já ter tudo funcionando junto — script GAS, workflow YAML e scripts Python — o sistema completo está disponível na Hotmart com suporte incluso. É o mesmo sistema que o @CanalQb usa para processar centenas de vídeos por semana de forma completamente autônoma.

Revise também as publicações anteriores desta série: Parte 1 — Script GAS e Parte 2 — Workflow YAML.

⚠️ Aviso: Este post contém link de produto pago. O @CanalQb pode receber comissão por indicações. O conteúdo técnico é gratuito e completo — a compra é opcional e acelera seu acesso ao sistema pronto.


Feito com Master Rules Claude v5.0 • © 2026 @CanalQb • canalqb.com.br

Marcadores: Blogger Cripto IA Jogos Python Script Sistemas Tutorial

© abril 11, 2026 CanalQb — Python, Scripts, Automação, Airdrops e Criptomoedas | Web3 e Tech na Prática

Comentários