Files
jhonny-editor/code/engine/scanner/analise.py
T
João Henrique b541f502ba feat: initial commit - Jhonny Editor
- Adicionado estrutura completa do projeto
- Configurado MCP server para Premiere Pro
- Adicionado documentação e skills
- Configurado Gitignore para o projeto
2026-09-08 09:59:31 -04:00

68 lines
2.3 KiB
Python

from typing import Any, Protocol
from .modelos import Cena, SegmentoDeTranscricao
class ProviderDeTranscricao(Protocol):
def transcrever(self, clipe: Any) -> list[SegmentoDeTranscricao]: ...
class ProviderDeAnaliseVisual(Protocol):
def analisar(self, clipe: Any, quadros: list[Any] | None = None) -> dict[str, Any]: ...
class TranscricaoDeAudio:
nome = "transcricao_de_audio"
def __init__(self, provider: ProviderDeTranscricao) -> None:
self.provider = provider
def executar(self, contexto):
if contexto.timeline is None:
return contexto
for faixa in contexto.timeline.faixas:
for clipe in faixa.clipes:
contexto.transcricoes[clipe.identificador] = self.provider.transcrever(clipe)
return contexto
class AnaliseVisual:
nome = "analise_visual"
def __init__(self, provider: ProviderDeAnaliseVisual) -> None:
self.provider = provider
def executar(self, contexto):
if contexto.timeline is None:
return contexto
for faixa in contexto.timeline.faixas:
for clipe in faixa.clipes:
contexto.caracteristicas_visuais[clipe.identificador] = self.provider.analisar(clipe)
return contexto
class DeteccaoDeCenas:
nome = "deteccao_de_cenas"
def executar(self, contexto):
cenas: list[Cena] = []
for faixa in (contexto.timeline.faixas if contexto.timeline else []):
for clipe in faixa.clipes:
cenas.append(Cena(clipe.intervalo_na_timeline.inicio,
clipe.intervalo_na_timeline.fim,
contexto.caracteristicas_visuais.get(clipe.identificador, {}).get("confianca")))
contexto.cenas = self._consolidar(cenas)
return contexto
@staticmethod
def _consolidar(cenas: list[Cena]) -> list[Cena]:
resultado: list[Cena] = []
for cena in sorted(cenas, key=lambda item: item.inicio):
if resultado and cena.inicio <= resultado[-1].fim:
anterior = resultado[-1]
resultado[-1] = Cena(anterior.inicio, max(anterior.fim, cena.fim),
anterior.confianca or cena.confianca)
else:
resultado.append(cena)
return resultado