- Instalado essentia-tensorflow no venv whisperx-transcricao (usado pelo painel CEP), corrigindo erro "A classificação musical precisa do suporte TensorFlow do Essentia" no catálogo de trilhas. - Ligada a classificação de emoção da fala (ProviderDeEmocaoHuggingFace) ao scanner via nova flag `classificar_emocao`, e adicionado emoção/confiança como critério de desempate secundário no zoom da skill editar-por-voz. - Zoom do caminho Python (aplicar_plano_de_edicao.py) passou a usar adjustment layer numa faixa de vídeo própria, em vez de escalar o clipe inteiro via set_clip_properties — mesma técnica já usada pelo executor .mjs do painel CEP. - Adicionado campo "Carregar por ID" na aba Editar Vídeo do painel CEP (step 2), para carregar um plano do SQLite direto pelo plano_id quando ele não está associado a nenhum video_id conhecido (ex.: plano de um vídeo que este banco nunca escaneou). - Trocado o campo de ID numérico por uma lista suspensa (novo listar_planos_de_edicao.py + RepositorioDePlanos.listar_todos_os_planos) que mostra data/hora e a intenção registrada pela skill em cada plano salvo, para escolher sem decorar o id. Resumo: - 15 arquivos alterados - 2 novos - 13 modificados - 0 removidos 13 files changed, 451 insertions(+), 65 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/index.html - code/cep-plugin/main.js - code/engine/editor/aplicador_de_plano_de_edicao.py - code/engine/editor/escrita/escrita_no_editor.py - code/engine/executar_scanner.py - code/engine/persistencia/repositorio_de_planos.py - code/engine/scanner/configuracao_visual.py - code/engine/testes/duplos_de_premiere.py - code/engine/testes/test_aplicador_de_plano_de_edicao.py - code/engine/testes/test_escrita_no_editor.py - code/plugins/premiere-pro/skills/editar-por-voz/criterios/01-leitura-do-json.md - code/plugins/premiere-pro/skills/editar-por-voz/criterios/05-zoom.md - code/engine/listar_planos_de_edicao.py - code/engine/testes/test_configuracao_visual_do_scanner.py
4.3 KiB
01 — Leitura das evidências do banco
Escopo: Como ler as evidências persistidas no banco, sem recalcular o que já foi medido. Quando: Fase 1 — ver a ordem de trabalho em
../SKILL.md.
O registro da edição e as tabelas relacionadas no banco são a entrada de todo o
trabalho. Um JSON exportado pode ser usado como visão de trabalho, mas deve ser
reconciliado com o video_id e a versão da análise antes de qualquer decisão.
Leia em camadas, de cima para baixo, e só desça quando precisar.
Camadas
| Camada | O que traz | Para quê |
|---|---|---|
analises_versao |
o que de fato rodou e qual versão está válida | leia primeiro — ver 09-analise-incompleta.md |
summary |
forma da peça, peak_moments, contagens |
visão geral em poucos números |
segmentos_de_transcricao |
cada fala com seus agregados | onde você mais trabalha |
palavras_de_transcricao |
detalhe por palavra | achar o instante exato de um destaque |
evidencias_visuais |
observações visuais por intervalo | apoiar a decisão quando disponível |
edicoes_de_video.configuracao |
objetivo e regras do vídeo | calibrar a seleção editorial |
Campos que decidem quase tudo
gap_before — silêncio antes da fala, em segundos. É o mapa estrutural
da gravação: acima de ~3s (take_boundary: true) a câmera parou ou a
tomada recomeçou. Num material real de 3min17s isso identificou 6
fronteiras, todas exatamente onde a pessoa recomeçava o roteiro.
take_boundary — booleano derivado do gap_before. Use para agrupar
tomadas.
emphasis (0–1) — índice combinado de energia, variação de tom,
variação de ritmo, pausa anterior e duração. É relativo ao material
analisado, nunca uma medida absoluta. Ver 02-enfase-e-reanalise.md.
energy (0–1) — intensidade relativa ao trecho mais alto da gravação.
pitch_delta (0–1) — quanto o tom se afasta da média do falante.
peak_emphasis e avg_energy (por segmento) — permitem julgar uma
frase inteira sem ler palavra por palavra. É por aqui que você avalia o
arco narrativo.
energy_raw e pitch_hz — valores brutos, sem normalização. Não
use para decidir; existem para permitir a reanálise da Fase 2.
emocao e confianca_emocao — classificação de emoção da fala
(quando disponível). São opcionais e complementares: dependem de um
recurso que precisa estar ligado na análise, então ficam vazios em boa
parte dos vídeos. Nunca decidem sozinhos — servem só de reforço/desempate
entre candidatos já elegíveis por emphasis/relevância narrativa. Ver
05-zoom.md.
O que NÃO fazer
- Não recalcule energia, tom ou ênfase. O sistema mede melhor e de forma reprodutível.
- Não reestime tempos "no olho". Use os timestamps do JSON.
- Não trate
emphasiscomo valor absoluto. Um 0,35 pode ser o pico de uma gravação e ruído em outra.
O timestamp por palavra tem um viés conhecido
O início de cada palavra vem sistematicamente adiantado em ~0,3-0,5s em
relação ao ataque real da fala — medido em material real com ffmpeg (astats),
consistente em 6 pontos do mesmo vídeo. O fim da palavra não tem esse problema
(erro de poucos centésimos). Causa: word_timestamps do faster-whisper deriva
por atenção cruzada, sem alinhamento forçado — ver 05_EXPERIENCIAS.md, entrada
de 2026-08-19.
Quando o pipeline já corrigiu isso: se layers.alignment for true
(transcript gerado com alinhamento forçado fonético via whisperx, implementado
depois desse aviso), o viés foi removido na origem — não aplique o offset
manual abaixo. O aviso vale só para transcripts antigos sem layers.alignment.
Isso não é "reestimar no olho" — é um bug de medição na fonte, não um
julgamento seu. Na prática (somente sem layers.alignment):
- Ao posicionar um
zoomcujostartprecisa cair exatamente na palavra (não uma frase inteira), some +0,3 a +0,4s ao timestamp do JSON antes de decidir, ou confira comffmpeg -af astatsse a precisão importar para o frame. - Não aplique essa correção a
gap_beforepara decidir corte — a régua de silêncio (06-texto-corte-marcador.md) já é conservadora o bastante para absorver esse erro; corrigir os dois ao mesmo tempo é redundante.