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
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
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
|
||||
Reference in New Issue
Block a user