feat: Instalado essentia-tensorflow no venv whisperx-transcricao (

- 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
This commit is contained in:
João Henrique
2026-09-10 16:04:15 -04:00
parent 2c9bdf2ff0
commit dd341e7d4c
15 changed files with 520 additions and 64 deletions
@@ -40,6 +40,9 @@ class ConfiguracaoVisualDoScanner:
faixas_de_audio: tuple[int, ...] = ()
modo_de_analise: str = "ambos"
metricas_de_fala: bool = False
# Classificação de emoção da fala (ProviderDeEmocaoHuggingFace) — desligada
# por padrão, mesmo motivo de metricas_de_fala: custo de processamento.
classificar_emocao: bool = False
recursos_vision: frozenset[str] = RECURSOS_VISION
detectar_cenas: bool = True
analisar_continuidade: bool = True
@@ -93,6 +96,7 @@ class ConfiguracaoVisualDoScanner:
faixas_de_audio=tuple(sorted(set(int(item) for item in dados.get("faixas_de_audio", ())))),
modo_de_analise=str(dados.get("modo_de_analise", "ambos")),
metricas_de_fala=bool(dados.get("metricas_de_fala", False)),
classificar_emocao=bool(dados.get("classificar_emocao", False)),
recursos_vision=frozenset(dados.get("recursos_vision", RECURSOS_VISION)),
detectar_cenas=bool(dados.get("detectar_cenas", True)),
analisar_continuidade=bool(dados.get("analisar_continuidade", True)),
@@ -108,6 +112,7 @@ class ConfiguracaoVisualDoScanner:
)
def para_dict(self) -> dict[str, Any]:
"""Serializa a configuração no mesmo formato de JSON consumido pelo painel."""
return {
"versao": 1,
"intervalo_em_segundos": self.intervalo_em_segundos,
@@ -116,6 +121,7 @@ class ConfiguracaoVisualDoScanner:
"faixas_de_audio": list(self.faixas_de_audio),
"modo_de_analise": self.modo_de_analise,
"metricas_de_fala": self.metricas_de_fala,
"classificar_emocao": self.classificar_emocao,
"recursos_vision": sorted(self.recursos_vision),
"detectar_cenas": self.detectar_cenas,
"analisar_continuidade": self.analisar_continuidade,