Vídeo com IA: Claude Code, Codex e ElevenLabs · Capítulo 25 de 25 · 24 min
Rotular o conteúdo de IA, documentar direitos e medir o custo por minuto final
Feche o projeto final com a divulgação de IA decidida por plataforma, a procedência examinada, os direitos documentados e o custo real de cada minuto entregue.
Este capítulo faz parte do curso gratuito Vídeo com IA: Claude Code, Codex e ElevenLabs.
O vídeo final precisa passar por três perguntas diferentes: pode ser publicado, está divulgado do jeito que cada plataforma exige e quanto custou produzir. Um sim numa delas não responde as outras. A licença comercial de uma ferramenta não autoriza usar um rosto, o rótulo de IA não resolve a música sem licença e o custo da tomada escolhida não é o custo do vídeo.
Sem esse fechamento, o canal arrisca remoção de vídeos por omissão reiterada do rótulo, descobre tarde que a trilha não podia ir para aquele destino e nunca sabe se o vídeo com IA saiu mais barato. Nesta aula você monta o pacote auditável do projeto final: vídeo aprovado, decisões de divulgação, autorizações, procedência examinada e o custo por minuto final, com as tentativas descartadas dentro da conta.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Decidir a divulgação por plataforma
O YouTube exige marcar o uso de IA quando o conteúdo realista mostra uma pessoa real dizendo ou fazendo o que não fez, altera a filmagem de um evento ou lugar real, gera uma cena realista que não aconteceu ou traz música gerada como foco do vídeo. A mesma página lista o que não exige declaração. Desde 27/05/2026, o rótulo aparece abaixo do player no vídeo longo e sobre o Short, pode ser aplicado automaticamente quando o criador não responde e, sozinho, não muda recomendação nem monetização. A omissão reiterada pode levar à remoção do vídeo ou à suspensão do Programa de Parcerias.
Na Meta, a ferramenta de divulgação é obrigatória para vídeo fotorrealista ou áudio de aparência realista criado ou alterado digitalmente. O TikTok prevê rótulos manuais e automáticos e lê Content Credentials nos uploads; pela API, o campo is_aigc visto na aula de publicação por API aplica o rótulo do criador. A regra prática: decida e justifique por destino, nunca transfira a exceção de uma rede para outra.
Desde 03/09/2026, o YouTube anuncia um segundo rótulo automático, o de conteúdo de marca não declarado, com detecção prevista para os meses seguintes e sem caminho claro de contestação. Registre no qa/direitos.json a decisão de patrocínio ao lado da de IA e confira os dois rótulos no Studio depois do envio, porque a API de upload não tem campo de patrocínio.
Uso de IA no vídeo e a decisão de divulgação
| Uso de IA no vídeo | No YouTube | Nas outras redes |
|---|---|---|
| Pessoa real dizendo o que não disse | Declarar | Declarar na Meta e no TikTok |
| B-roll gerado realista de cena que não ocorreu | Declarar | Declarar: é vídeo fotorrealista |
| Música gerada como foco do vídeo | Declarar | Avaliar pela regra de cada rede |
| Roteiro, título, miniatura e legenda com IA | Não exige | Não transfira a exceção sem ler a regra |
| Correção de cor e upscale | Não exige | Não transfira a exceção sem ler a regra |
| Clone da própria voz para narrar ou dublar | Não exige | Avaliar na Meta: é áudio realista alterado |
Decisões por plataforma de 12/10/2026. Registre a justificativa de cada uma no qa/direitos.json.

Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Procedência é outra camada. O C2PA é um padrão aberto de credenciais de conteúdo, um histórico assinado de origem e edições embutido no arquivo; as Content Credentials são essas credenciais lidas por plataformas e verificadores. A versão atual da especificação técnica é a 2.4, de 01/04/2026. O SDK c2pa-python está na 0.38.0, de 29/09/2026, e o c2patool, que lê, assina e valida manifestos, na 0.28.2, de 08/10/2026. Valide o arquivo depois da última renderização, porque transcodificar depois da assinatura pode quebrar o vínculo; os comandos de assinatura e a configuração de certificado seguem a documentação oficial do c2patool, que muda com a versão.
O SynthID, marca d'água imperceptível do Google, é um mecanismo diferente: o verificador de vídeo no app Gemini aceita até 100 MB e 90 segundos, e o SynthID Detector, aberto ao público em 07/10/2026 segundo o blog do Google, lê marcas do Google e de parceiros como OpenAI, NVIDIA e Kakao, com a Apple anunciada para breve. Ele só reconhece mídia de quem adotou a marca, então um resultado negativo não prova que o vídeo é autêntico. O curso de deploy resume o princípio em procedência prova origem, não inocência.
Provas que não provam e evidência que vale
Provas que não provam
Evitar
- Hash e JSON externo tratados como C2PA
- SynthID negativo tratado como autêntico
- Hashtag no lugar da ferramenta de divulgação
- Plano pago tratado como autorização de rosto
Evidência que vale
Recomendado
- Manifesto C2PA validado no arquivo final
- Origem de cada plano registrada no inventário
- Campo de divulgação da própria plataforma
- Autorização escrita da pessoa retratada
Documentar voz, imagem, música e licença
Para cada ativo usado, guarde a permissão referente àquele material, não à ferramenta. Voz e rosto clonados exigem autorização escrita, específica e revogável, com o processo da aula de clonagem com consentimento. A política da ElevenLabs proíbe imitar candidatos e autoridades eleitas, mesmo com autorização. Em período eleitoral, a regra do TSE para 2026 proíbe publicar conteúdo sintético novo com candidato ou pessoa pública nas 72 horas antes e nas 24 horas depois do pleito, mesmo rotulado: rotular não torna permitido o que é proibido. A aba sobre a regra eleitoral, logo depois do script de auditoria, mostra como a tese de 01/09/2026 delimita essa regra.
Na música gerada pelo Eleven Music, confira o plano e o destino de cada faixa pelos termos resumidos na aula de dublagem, música e efeitos; o plano gratuito nem permite baixar a faixa, e o JSON de ativos sonoros daquela aula é a evidência que entra no qa/direitos.json. Licença de código também não cobre mídia: o HyperFrames é Apache 2.0 para o código, e a licença do Remotion, vista na aula de Remotion, cobra à parte de empresas com mais de três pessoas. Saída gerada de forma autônoma por IA, sem contribuição humana relevante, em regra não tem proteção autoral; não prometa exclusividade sobre ela. Este é um checklist operacional, não parecer jurídico.
"""Auditoria operacional local. Não assina C2PA e não substitui análise jurídica.
Uso: python scripts/auditar_entrega.py (na primeira vez cria qa/direitos.json para preencher)"""
import hashlib
import json
import subprocess
from pathlib import Path
VIDEO = Path("renders/final_9x16.mp4")
DIREITOS = Path("qa/direitos.json")
SAIDA = Path("qa/auditoria.json")
PENDENTE = "[preencher]"
def sha256(p):
h = hashlib.sha256()
with p.open("rb") as f:
for bloco in iter(lambda: f.read(1024 * 1024), b""):
h.update(bloco)
return h.hexdigest()
if not DIREITOS.exists():
modelo = {
"revisor": PENDENTE,
"aprovacao_editorial": False,
"itens": [ # um item por ativo usado: voz, rosto, música, b-roll, fonte, marca
{"tipo": "voz", "situacao": PENDENTE, "evidencia": PENDENTE},
{"tipo": "imagem", "situacao": PENDENTE, "evidencia": PENDENTE},
{"tipo": "musica", "situacao": PENDENTE, "evidencia": PENDENTE},
],
"divulgacao": {
"youtube": {"veredito": PENDENTE, "justificativa": PENDENTE},
"instagram": {"veredito": PENDENTE, "justificativa": PENDENTE},
"tiktok": {"veredito": PENDENTE, "justificativa": PENDENTE},
},
"patrocinio": {"veredito": PENDENTE, "justificativa": PENDENTE}, # declarar ou nao_ha
"c2pa": {"verificacao": PENDENTE, "relatorio": PENDENTE, "sha256_verificado": PENDENTE},
}
DIREITOS.write_text(json.dumps(modelo, ensure_ascii=False, indent=2), encoding="utf-8")
raise SystemExit("Preencha qa/direitos.json. Nenhuma publicação foi autorizada.")
d = json.loads(DIREITOS.read_text(encoding="utf-8"))
hash_final = sha256(VIDEO)
pendencias = []
if d.get("aprovacao_editorial") is not True:
pendencias.append("Aprovação editorial ausente.")
if d.get("revisor") in (None, "", PENDENTE):
pendencias.append("Revisor não identificado.")
for item in d.get("itens", []):
if item.get("situacao") not in ("autorizado", "proprio", "nao_utilizado"):
pendencias.append(f"Direitos pendentes: {item.get('tipo')}")
if item.get("evidencia") in (None, "", PENDENTE):
pendencias.append(f"Evidência ausente: {item.get('tipo')}")
for plataforma, veredito in d.get("divulgacao", {}).items():
if veredito.get("veredito") not in ("declarar", "nao_exigido"):
pendencias.append(f"Divulgação pendente: {plataforma}")
if veredito.get("justificativa") in (None, "", PENDENTE):
pendencias.append(f"Justificativa ausente: {plataforma}")
patrocinio = d.get("patrocinio", {})
if patrocinio.get("veredito") not in ("declarar", "nao_ha"):
pendencias.append("Decisão de patrocínio pendente (marcada no YouTube Studio).")
if not Path("qa/origem_tela.json").exists():
pendencias.append("Ficha de origem da tela ausente: uma linha por item visual.")
# Procedência é uma verificação à parte, feita no arquivo FINAL.
c2pa = d.get("c2pa", {})
if c2pa.get("verificacao") in (None, "", PENDENTE):
pendencias.append("Procedência C2PA ainda não examinada.")
elif c2pa.get("sha256_verificado") != hash_final:
pendencias.append("O vídeo mudou depois da verificação de procedência. Verifique de novo.")
duracao = float(subprocess.check_output(
["ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "csv=p=0", str(VIDEO)],
text=True).strip())
relatorio = {
"arquivo": str(VIDEO), "sha256": hash_final, "duracao_s": duracao,
"direitos": d, "pendencias": pendencias,
"apto_pelo_checklist_local": not pendencias,
"aviso": "Hash e JSON externo não são uma assinatura C2PA.",
}
SAIDA.write_text(json.dumps(relatorio, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps({"pendencias": pendencias, "duracao_s": duracao}, ensure_ascii=False, indent=2))
raise SystemExit(1 if pendencias else 0)Datas, regra eleitoral e assinatura antes de publicar
Datas de procedência e rótulos
Datas de procedência e rótulos que mudam o fechamento
- 30/10/2024Concluído
containsSyntheticMedia no YouTube
Campo de autodeclaração gravável no insert e no update.
- 01/04/2026Concluído
C2PA 2.4
Versão atual da especificação técnica.
- 27/05/2026Concluído
Novos rótulos do YouTube
Abaixo do player no vídeo longo e sobre o Short.
- 22/06/2026Concluído
Rótulo de IA pela API do Instagram
is_ai_generated no container, com Instagram Login ou Facebook Login.
- 02/08/2026Concluído
Artigo 50 do AI Act
O fornecedor marca a saída em formato legível por máquina; quem publica deepfake divulga de forma visível ou audível.
- 01/09/2026Concluído
Tese do TSE sobre deepfake
Define deepfake e limita a vedação à propaganda eleitoral.
- 03/09/2026Concluído
Rótulo de marca no YouTube
Patrocínio não declarado pode receber rótulo automático.
- 29/09/2026Concluído
c2pa-python 0.38.0
SDK para ler, assinar e validar manifestos em Python.
- 07/10/2026Concluído
SynthID Detector aberto
Lê marcas do Google, OpenAI, NVIDIA e Kakao, com a Apple anunciada; negativo não prova autenticidade.
- 08/10/2026Agora
c2patool 0.28.2
Ferramenta de linha de comando para ler, assinar e validar manifestos.
- 02/12/2026Previsto
Fim da carência do artigo 50(2)
Só a marcação legível por máquina de sistemas no mercado antes de 02/08/2026.
Ler a regra eleitoral pela tese de 01/09/2026
Em 01/09/2026, o TSE fixou tese sobre deepfake: é conteúdo sintético feito ou alterado por IA, com grau de realismo, que cria, reproduz ou altera imagem, voz ou manifestação de pessoa viva, falecida ou fictícia. Na mesma decisão, a corte limitou a vedação do art. 9º-C, § 1º, da Resolução 23.610/2019 ao conteúdo que é propaganda eleitoral. Na prática: rotular não legaliza deepfake em propaganda; vídeo de receita sem candidato fica fora da regra; e a janela de 72 horas antes e 24 horas depois do pleito continua valendo para conteúdo sintético com candidato, com leitura divergente sobre valer por turno ou só no encerramento. Na dúvida, não publique nada sintético com pessoa pública nessa janela.
O rótulo da plataforma, sozinho, não basta. O projeto VigIA, da Agência Lupa, contou 920 publicações eleitorais com IA no primeiro turno, de 16/08 a 28/09/2026: 554 eram deepfakes e só 371 tinham alguma sinalização, 219 por rótulo da plataforma e 152 por aviso do autor. Declare pelo campo da plataforma e escreva também o aviso na descrição. Está pronto quando o qa/direitos.json registra, por destino, se o vídeo mostra pessoa real e se a data cai em período eleitoral.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Assinar a publicação: o agente edita, quem assina é você
O agente corta, monta e legenda, mas a assinatura do vídeo é sua. Antes de trocar a privacidade para público, assista ao arquivo final inteiro, com som, e confira três regras de credibilidade: a tela segue a fala, então nome, gráfico e número aparecem quando são ditos; material de terceiros entra real, com o post, a página, o logo ou o número verdadeiro; e nada que a pessoa não falou aparece na tela. Cada item visual ganha uma linha na ficha de origem, qa/origem_tela.json, com o trecho da transcrição que o justifica ou a URL e a data do material de terceiros, e item sem linha sai do vídeo. Erro comum: supor que o agente ouviu a trilha; ele escolhe pela descrição. Está pronto quando os oito passos da conferência abaixo estão cumpridos.
Se a figura ultrapassar a área visível, deslize para os lados. Pelo teclado, foque a figura e use as setas.
Antes de publicar: o agente edita, quem assina é você
Os quatro primeiros passos são assistir e conferir; os quatro últimos fecham a entrega.
Passo 1: Assista ao vídeo final inteiro, com som, no arquivo que vai ser enviado
Passo 2: Compare nomes e números da tela com a fala
Deu certo quando: Cada nome e cada número aparecem quando são ditos.
Passo 3: Revise na legenda as marcas, os nomes próprios e os termos técnicos
Passo 4: Ouça a trilha e os efeitos
Erro comum: Supor que o agente ouviu o que escolheu; ele escolhe pela descrição.
Passo 5: Feche o qa/origem_tela.json com uma linha por item visual
Deu certo quando: Nenhum item visual fica sem linha na ficha.
Passo 6: Confirme que o vídeo entrega o que o título e a miniatura prometem
Passo 7: Comece os capítulos da descrição em 00:00
Passo 8: Ponha na descrição os links citados na fala e abra cada um
No fim você tem: Vídeo assistido inteiro, com som, e ficha de origem completa, pronto para você assinar.
Calcular o custo pelo minuto entregue
O custo por minuto final é o custo do projeto dividido pelos minutos do vídeo entregue. Duas versões convivem. O custo variável soma as chamadas cobradas, inclusive as tentativas descartadas, mais render, armazenamento e transferência. O custo completo alocado soma a esse valor a parcela documentada de assinaturas, licenças e trabalho humano. O denominador é sempre o vídeo entregue, nunca os segundos gerados nem o bruto.
O registro de custo por etapa vem pronto do pipeline idempotente, e o laboratório daquela aula mostra qual etapa pesa mais antes de você gastar. Na planilha, a quantidade do b-roll gerado é a soma de segundos_medidos em custos/custos.csv, gravado na aula de geração por API, e as demais etapas vêm do custo_usd de cada etapa em estado/manifesto-estado.json. Valor que falta é pendência, não zero, e crédito de assinatura não se converte mecanicamente para a tarifa em dólar da API. O curso LLM FinOps lista os custos que não são token, e é por eles que a conta costuma sair menor do que é.
Acrescente a razão tentativas por take usável: quantas gerações cobradas cada plano aprovado custou. Relatos de 11/10/2026 falam em três a cinco por clipe aprovado nas plataformas de crédito, sem medição independente; o seu número vem do manifesto de estado. Na Gemini API, falha de processamento não é cobrada, mas vídeo gerado e descartado é. Com três tentativas por take, o segundo útil custa o triplo da tabela.
Quanto pesa uma tentativa descartada
US$ 0,60
Uma tentativa de 5 s no gen4.5
US$ 0,12 por segundo gerado, tarifa de 12/10/2026
US$ 1,80
Três tentativas cobradas, uma usada
o plano custa três vezes, não uma
US$ 0,22
Uma hora de transcrição no Scribe v2
por hora de áudio, sem adicionais
US$ 0,017
Um minuto renderizado no Remotion Lambda
só computação, sem S3, transferência e licença
Fonte: Runway, ElevenLabs e Remotion, tabelas de 06/10/2026 a 12/10/2026.
A planilha abaixo, custos/custo_por_minuto.csv, é um CSV que abre em qualquer editor de planilhas. Cada linha tem quantidade, unidade, tarifa e evidência; o script multiplica, soma, aponta a etapa mais cara e só calcula o custo por minuto final quando não sobra nenhuma linha pendente. Na falta de um valor, ele mostra o subtotal identificado e se recusa a chamar isso de total. Retorno sobre investimento exige receita ou benefício atribuível, que a planilha não inventa; o curso LLM FinOps mostra como apresentar custo por resultado à diretoria.
"""scripts/custos.py: planilha de custo por minuto final, sem inventar valores.
Primeira execução cria custos/custo_por_minuto.csv. Preencha quantidade (inclua os descartes) e evidência.
Uso: python scripts/custos.py 62.4 (duração do vídeo ENTREGUE, em segundos)"""
import csv
import sys
from decimal import Decimal, InvalidOperation
from pathlib import Path
PLANILHA = Path("custos/custo_por_minuto.csv")
CAMPOS = ["etapa", "servico", "quantidade", "unidade", "tarifa_usd", "evidencia"]
# Tarifas de referência em 12/10/2026; vazio = preencha pela fatura.
MODELO = [
["narracao_entrada", "claude-opus-5-5", "", "token de entrada", "0.000004", ""],
["narracao_saida", "claude-opus-5-5", "", "token de saída", "0.00002", ""],
["revisao_entrada", "gpt-6.1-sol", "", "token de entrada", "0.000002", ""],
["revisao_saida", "gpt-6.1-sol", "", "token de saída", "0.00001", ""],
["voz", "eleven_v4 (lista desde 13/10/2026; a promoção terminou em 12/10)", "", "caractere", "0.00008", ""],
["transcricao", "scribe_v2", "", "hora de áudio", "0.22", ""],
["musica", "music_v2_5", "", "minuto gerado", "0.15", ""],
["efeitos", "eleven_text_to_sound_v2", "", "minuto gerado", "0.12", ""],
["dublagem", "dubbing_v2", "", "minuto dublado", "2.20", ""],
["broll", "modelo de vídeo usado", "", "segundo gerado com descartes", "", ""],
["infraestrutura", "render, armazenamento e transferência", "", "US$", "1", ""],
["licencas_rateio", "fração de planos e licenças deste vídeo", "", "US$", "1", ""],
["trabalho_humano", "horas de revisão e edição", "", "hora", "", ""],
# Linhas de contagem, com tarifa 0: só alimentam a razão tentativas por take usável.
["broll_tentativas", "gerações cobradas no manifesto de estado", "", "tentativa", "0", ""],
["broll_takes_usados", "planos aprovados no vídeo entregue", "", "take", "0", ""],
]
if not PLANILHA.exists():
with PLANILHA.open("w", newline="", encoding="utf-8") as f:
w = csv.writer(f)
w.writerow(CAMPOS)
w.writerows(MODELO)
raise SystemExit("Criei custos/custo_por_minuto.csv. Preencha quantidades e evidências e rode de novo.")
if len(sys.argv) < 2:
raise SystemExit("Informe a duração do vídeo entregue em segundos.")
segundos = Decimal(sys.argv[1])
if segundos <= 0:
raise SystemExit("A duração final deve ser positiva.")
pendencias, linhas, total, contagem = [], [], Decimal("0"), {}
with PLANILHA.open(newline="", encoding="utf-8") as f:
for linha in csv.DictReader(f):
try:
qtd, tarifa = Decimal(linha["quantidade"]), Decimal(linha["tarifa_usd"])
except InvalidOperation: # campo vazio ou inválido não vira zero
pendencias.append(linha["etapa"] + ": valor")
continue
if qtd < 0 or tarifa < 0:
raise SystemExit(f"{linha['etapa']}: valor negativo. Créditos vão em registro à parte.")
if not linha["evidencia"].strip():
pendencias.append(linha["etapa"] + ": evidência")
contagem[linha["etapa"]] = qtd
custo = qtd * tarifa
linhas.append((linha["etapa"], custo))
total += custo
for etapa, custo in sorted(linhas, key=lambda x: x[1], reverse=True):
parte = (custo / total * 100) if total else Decimal("0")
print(f"{etapa:<18} US$ {custo:>10.4f} {parte:5.1f}%")
print(f"\nSubtotal identificado: US$ {total:.4f}")
if contagem.get("broll_takes_usados"):
razao = contagem.get("broll_tentativas", Decimal("0")) / contagem["broll_takes_usados"]
print(f"Tentativas por take usável: {razao:.1f}")
if pendencias:
print("Custo por minuto final: pendente. Faltam:", ", ".join(pendencias))
raise SystemExit(1)
minutos = segundos / Decimal("60")
print(f"Custo completo alocado: US$ {total:.4f}")
print(f"Custo por minuto final: US$ {total / minutos:.4f} ({minutos:.2f} min entregues)")
print("Retorno: exige receita ou benefício atribuível, fora desta planilha.")Fechar o projeto final do curso
O projeto final é o pipeline semanal da Cozinha da Rafa: um vídeo longo 16:9 e dois cortes 9:16 a partir do mesmo briefing, do roteiro à publicação.
Passo 1: Inventarie tudo o que foi gerado ou alterado por IA
Deu certo quando: O inventário separa roteiro, voz, imagem, b-roll gerado e música.
Erro comum: Marcar feito com IA sem dizer o que mudou.
Passo 2: Decida a divulgação por plataforma no qa/direitos.json
Deu certo quando: YouTube, Instagram e TikTok têm decisão e justificativa próprias.
Erro comum: Aplicar a exceção da voz própria do YouTube a todas as redes.
Passo 3: Reúna autorizações e licenças dos ativos usados
Deu certo quando: Cada item tem situação autorizado, proprio ou nao_utilizado e uma evidência.
Erro comum: Confundir plano pago com autorização de terceiros.
Passo 4: Examine a procedência no arquivo final
Deu certo quando: O sha256_verificado do qa/direitos.json é igual ao hash do vídeo entregue.
Erro comum: Assinar antes da última transcodificação e não validar depois.
Passo 5: Preencha o custos/custo_por_minuto.csv com todas as cobranças
Deu certo quando: Cada linha tem quantidade, tarifa e evidência, inclusive os descartes.
Erro comum: Contar só a tomada escolhida.
Passo 6: Rode scripts/custos.py com a duração entregue
Deu certo quando: O terminal mostra a etapa mais cara e o custo por minuto final.
Erro comum: Dividir pelo total de segundos gerados.
Passo 7: Rode scripts/auditar_entrega.py e publique só sem pendências
Deu certo quando: qa/auditoria.json mostra apto_pelo_checklist_local igual a true.
Erro comum: Tratar campo vazio como aprovação.
No fim você tem: O pacote auditável do projeto final: vídeo aprovado, divulgação decidida, direitos documentados, procedência examinada e custo por minuto final.
Guia prático: inventário de procedência e custo por minuto em reais
A aula fecha o pacote auditável. Faltam duas rotinas que o pacote ainda não automatiza: ler as credenciais de conteúdo de cada clipe gerado e do vídeo final com o c2patool, para registrar o que cada arquivo carrega antes e depois da montagem, e converter o custo por minuto para reais pela PTAX, a cotação oficial do dólar publicada pelo Banco Central. O resultado é o qa/procedencia.json e o custo do minuto final em dólar e em reais, com a data da cotação.
Funções, casos de uso e aplicações
Funções
Ferramentas para registrar origem, direitos de áudio e custo
| Função ou recurso | O que faz | Quando usar | Data |
|---|---|---|---|
| c2patool <arquivo> e --info | Mostra o manifesto C2PA em JSON; --info traz tamanho, número de manifestos e se validou | Em cada clipe de midia/gerados/clips/ e no arquivo final, antes do envio | Versão 0.28.2 de 08/10/2026 |
| c2patool <arquivo> trust e c2patool init trust | Valida contra uma lista de confiança; o init guarda os arquivos para as próximas leituras | Quando o relatório precisa dizer se a assinatura vem de certificado confiável | Em vigor em 12/10/2026 |
| Shorts acima de um minuto com reivindicação | Short de mais de 1 min com reivindicação de Content ID fica bloqueado no mundo todo, sem penalidade ao canal | Corte longo com trilha de terceiros: troque a trilha ou fique em 60 s | Shorts de até 3 min desde 15/10/2024 |
| Instagram Audio API | Busca sons originais e músicas livres de royalties da Sound Collection e anexa ao Reel na criação; só com Facebook Login | Trilha de Reel com licença da própria plataforma em vez de faixa externa | 01/06/2026 |
| Campo media_audio_type (Instagram) | Devolve MUSIC ou ORIGINAL_SOUND para vídeo publicado | Auditar, depois da publicação, que áudio o Reel carrega | 01/06/2026 |
| PTAX pela API Olinda do Banco Central | Cotação de compra e venda do dólar por dia útil, em JSON | Converter o custo por minuto para reais com data e fonte | Diária, em dias úteis |
Casos de uso
Faculdade particular em Ribeirão Preto que produz vídeos de divulgação de cursos
Educação
Dor
O jurídico pediu prova de origem dos planos gerados, e ninguém sabia quais clipes carregavam credenciais e quais as perderam na montagem.
Solução
Roda o procedencia.py ao fim de cada vídeo e anexa o qa/procedencia.json ao pacote de auditoria.
Resultado
Observar no relatório quantos clipes chegam com manifesto e se o final tem o próprio; a montagem com FFmpeg costuma não levar o manifesto adiante, e isso fica registrado.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Agência de conteúdo em Recife que cobra por vídeo entregue
Marketing digital
Dor
O orçamento ao cliente era em reais, e o custo de produção vinha em dólar sem data de câmbio.
Solução
O custos.py da aula dá o custo por minuto em dólar, e a PTAX de venda do dia de fechamento converte para reais no relatório.
Resultado
Separar, mês a mês, quanto do custo em reais muda pelo câmbio e quanto muda pelas tentativas por take usável.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Na prática
Instale o c2patool pelo arquivo da página de versões do repositório oficial e rode o script abaixo na raiz video-ia. Ele só lê: não assina, não altera mídia e não trata ausência de manifesto como prova de nada. Depois, a linha de PTAX converte o custo do custos.py.
"""procedencia.py: lê credenciais C2PA dos clipes gerados e do final, sem assinar nada.
Uso (na raiz video-ia): python scripts/procedencia.py renders/final_9x16.mp4"""
import datetime as dt
import hashlib
import json
import subprocess
import sys
from pathlib import Path
arquivos = sorted(Path("midia/gerados/clips").glob("*.mp4")) + [Path(sys.argv[1])]
relatorio = {"gerado_em": dt.datetime.now().isoformat(timespec="seconds"), "arquivos": []}
for arq in arquivos:
r = subprocess.run(["c2patool", str(arq), "--info"], capture_output=True, text=True)
saida = (r.stdout or r.stderr).strip()
relatorio["arquivos"].append({
"arquivo": str(arq),
"sha256": hashlib.sha256(arq.read_bytes()).hexdigest(),
"tem_manifesto": r.returncode == 0,
"resumo_c2patool": saida.splitlines()[:6], # o texto da ferramenta, sem interpretação
})
print(f"{'COM' if r.returncode == 0 else 'SEM'} manifesto {arq}")
Path("qa").mkdir(exist_ok=True)
Path("qa/procedencia.json").write_text(json.dumps(relatorio, ensure_ascii=False, indent=2),
encoding="utf-8")
print("Gravado qa/procedencia.json. Ausência de manifesto não prova que o vídeo é autêntico.")# Na raiz video-ia: PTAX de venda de 09/10/2026 (o dia vai no formato MM-DD-AAAA)
curl -s "https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/CotacaoDolarDia(dataCotacao=@dataCotacao)?@dataCotacao='10-09-2026'&%24format=json" \
| jq -r '.value[0] | "PTAX venda \(.cotacaoVenda) em \(.dataHoraCotacao)"'
# Custo em reais = custo por minuto em US$ (saída do custos.py) x PTAX de venda.
# Fim de semana e feriado voltam vazios: use o último dia útil e anote a data no relatório.Fechar procedência e custo em reais
Passo 1: Rode c2patool -V e depois o procedencia.py com o arquivo final
Deu certo quando: O qa/procedencia.json lista cada clipe com hash e COM ou SEM manifesto.
Erro comum: Rodar antes da última renderização; qualquer reencode depois muda o arquivo.
Passo 2: Cruze o relatório com o inventário de IA do qa/direitos.json
Deu certo quando: Todo clipe gerado aparece nos dois, com a mesma origem.
Passo 3: Confira a trilha de cada corte longo
Short acima de 1 min com faixa reivindicada fica bloqueado; Reel pode usar a Sound Collection.
Deu certo quando: Cada trilha tem licença registrada para o destino e a duração do corte.
Passo 4: Converta o custo por minuto com a PTAX do dia do fechamento
Deu certo quando: O relatório traz dólar, reais, a cotação usada e a data.
Erro comum: Usar a cotação de outro dia sem anotar e comparar meses com câmbios diferentes.
Armadilhas
Relatório que parece prova ou registro que se sustenta
Evitar
Coluna a evitar
- Escrever que o vídeo é autêntico porque não há manifesto
- Ler o JSON do c2patool e reescrever com palavras próprias
- Corte de 90 s no Shorts com trilha de terceiros
- Custo em reais sem data de câmbio
Recomendado
Coluna recomendada
- Registrar COM ou SEM manifesto e o hash de cada arquivo
- Guardar o resumo da ferramenta como saiu, ao lado da decisão tomada
- Trilha própria, da plataforma, ou corte de até 60 s
- PTAX de venda com data e hora no relatório
Quatro decisões fecham o projeto. Se a cena é fotorrealista e não aconteceu, declare na plataforma mesmo que seja só um plano de apoio de três segundos. Se a licença não cobre o destino, troque o ativo ou obtenha a autorização certa antes de publicar. Se falta uma cobrança, apresente o subtotal identificado e não o chame de custo total. Se a mídia mudou depois da verificação de procedência, verifique de novo o arquivo final.
Na Cozinha da Rafa, canal de receitas regionais em Recife com três vídeos por semana, o pacote semanal reúne o vídeo longo e os dois cortes. O b-roll gerado da massa do bolo de rolo entra no inventário e recebe declaração; a voz clonada da própria Rafa tem autorização arquivada; a trilha tem licença compatível com YouTube, Instagram e TikTok. O relatório separa o custo compartilhado da receita, como narração e b-roll gerado, do custo adicional de cada corte, para não contar a mesma geração três vezes.
Feche o seu projeto com os sete passos do guia e guarde o pacote junto do vídeo. Está pronto quando o vídeo final foi assistido e aprovado, a divulgação está decidida e revista na interface de cada plataforma, os direitos têm evidência, a procedência foi examinada no arquivo entregue e o custo por minuto final foi calculado sem nenhuma linha pendente.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. Nos vídeos e áudios, use Anotar este momento. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Conexões deste capítulo
Veja o que estudar antes e para onde seguir depois, explore os conceitos e compare abordagens em outros cursos. Sugestões marcadas como “sugerido pelo grafo” vêm dos assuntos em comum, não do índice do curso.
Estude antes
- CursoClaude Code CLI: Programação com IA
- CursoAstra profundosugerido pelo grafoA quinta parte do Astra planeja o vídeo e edita o material bruto com o modelo dirigindo a ferramenta. O curso de vídeo com IA aprofunda esse trabalho com Claude Code, Codex e ElevenLabs, do roteiro à publicação. O grafo já sugeria esta ordem pela regra de entrada da trilha; com a ordem anterior curada, ela passa a ser declarada (Etapa 4, wave 3).
- CursoSetup Completo: do zero ao Claude Codesugerido pelo grafo7 capítulos de “Vídeo com IA: Claude Code, Codex e ElevenLabs” usam conceitos apresentados em “Setup Completo: do zero ao Claude Code”.
Depois, siga para
- CursoFrontends com Vibecodingsugerido pelo grafo21 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
- CursoDo Agile ao Agentic Operating Modelsugerido pelo grafo5 capítulos de “Do Agile ao Agentic Operating Model” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
- CursoAgentes de IA Autônomos: Do Conceito à Produçãosugerido pelo grafo7 capítulos de “Agentes de IA Autônomos: Do Conceito à Produção” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
- CursoLLM FinOps: o custo da IA para quem assina o orçamentosugerido pelo grafo4 capítulos de “LLM FinOps: o custo da IA para quem assina o orçamento” usam conceitos apresentados em “Vídeo com IA: Claude Code, Codex e ElevenLabs”.
Conceitos deste capítulo
O mesmo assunto em outros cursos
- TikTok Ads e Live Commerce 2027Produzir com o Symphony e revisar tudo o que a IA gerouExaminar conexões de Produzir com o Symphony e revisar tudo o que a IA gerou
- Google Ads 2027Produzir criativos com Asset Studio e revisar antes de publicarExaminar conexões de Produzir criativos com Asset Studio e revisar antes de publicar
- E-E-A-T e Qualidade de ConteúdoDeclarar uso de IA sem criar passivo jurídicoExaminar conexões de Declarar uso de IA sem criar passivo jurídico
- Gestão de Projetos GEOExigir a origem dos materiais usados pelo fornecedorExaminar conexões de Exigir a origem dos materiais usados pelo fornecedor
Voltar ao capítulo anterior: Publicar por API no YouTube, Reels e TikTok com OAuth e rótulo de IA
Leve uma ideia para a prática
Escolha uma atividade no painel e volte a este curso quando quiser.
Atividades e evolução ficam reunidas no painel da sua conta.
Laboratórios ao vivo deste curso
Cada laboratório monta a biblioteca real dentro da aula, com controles para você mexer e o código do exemplo para copiar. O texto de reserva descreve a demonstração para quem lê sem JavaScript. O link abre o capítulo já no ponto do laboratório.
MediaRecorder, Canvas 2D e Long Animation Frames (plataforma)
Grave a cena em tempo real e veja os quadros que se perdem
Suba as partículas, force um bloqueio de 300 ms e grave seis segundos; compare com o render quadro a quadro desta aula.
Pacote
Abrir no capítuloMontar vídeo em HTML com HyperFrames e escolher entre ele e o Remotionsem pacoteMotion
Ver agentes em paralelo trocando mensagens numa linha do tempo
Reproduza a cena, percorra o tempo pelo controle e compare o tempo de parede com a soma das barras de cada agente.
Pacote
Abrir no capítuloParalelizar cenas com subagentes sem estourar o limite das APIsmotionReact (sem dependência extra), com as APIs do Veo e do fal.ai
Prompt de vídeo em cinco camadas, pronto para a API
Escolha plano, câmera, luz, ação e áudio e copie o prompt e o JSON para o Veo ou para o fal.ai.
Pacote
Abrir no capítuloEscrever prompt de vídeo em cinco camadas e manter o personagem consistentereactReact (sem dependência extra), com o comando para o FFmpeg
Corte o vídeo apagando palavras da transcrição
Aperte as palavras para removê-las, ligue a remoção de pausas e copie o comando FFmpeg e a legenda SRT gerados.
Pacote
Abrir no capítuloRemover pausas e reenquadrar o vídeo de 16:9 para 9:16 com legenda por palavrareactReact (sem dependência extra)
Quanto custa cada etapa do seu pipeline de vídeo
Troque a ferramenta de cada etapa e o percentual de b-roll e veja qual etapa pesa no custo por minuto e por vídeo.
Pacote
Abrir no capítuloOrquestrar o pipeline com etapas idempotentes e teto de gastoreact
Capítulos vizinhos em Vídeo com IA: Claude Code, Codex e ElevenLabs
- 21Chamar Veo, Kling, Seedance e Runway por API com polling e custo controlado
- 22Remover pausas e reenquadrar o vídeo de 16:9 para 9:16 com legenda por palavra
- 23Orquestrar o pipeline com etapas idempotentes e teto de gasto
- 24Publicar por API no YouTube, Reels e TikTok com OAuth e rótulo de IA
- 25Rotular o conteúdo de IA, documentar direitos e medir o custo por minuto final