feat: criado modo explícito de análise do Scanner para separar som
- criado modo explícito de análise do Scanner para separar som, imagem ou ambos Resumo: - 5 arquivos alterados - 0 novos - 5 modificados - 0 removidos 5 files changed, 68 insertions(+), 11 deletions(-) Arquivos: - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/executar_scanner.py - code/engine/scanner/configuracao_visual.py
This commit is contained in:
@@ -59,7 +59,9 @@ def executar(entrada: Path, saida: Path) -> Path:
|
||||
pedido = json.loads(entrada.read_text(encoding="utf-8"))
|
||||
configuracao = ConfiguracaoVisualDoScanner.de_dict(pedido["perfil"])
|
||||
timeline = ConversorDeTimeline().converter(pedido["timeline"])
|
||||
clipes = [clipe for faixa in timeline.faixas if faixa.tipo == "video"
|
||||
analisar_imagem = configuracao.modo_de_analise in {"imagem", "ambos"}
|
||||
analisar_som = configuracao.modo_de_analise in {"som", "ambos"}
|
||||
clipes = [clipe for faixa in timeline.faixas if analisar_imagem and faixa.tipo == "video"
|
||||
and faixa.indice in configuracao.faixas_de_video for clipe in faixa.clipes]
|
||||
total_estimado = sum(max(1, math.ceil((clipe.intervalo_na_origem or clipe.intervalo_na_timeline).duracao /
|
||||
configuracao.intervalo_em_segundos)) + 1 for clipe in clipes) or 1
|
||||
@@ -105,7 +107,8 @@ def executar(entrada: Path, saida: Path) -> Path:
|
||||
"arquivo_original": clipe.arquivo}, "erro": str(erro)})
|
||||
concluidos += peso
|
||||
faixas_de_audio = [faixa for faixa in timeline.faixas
|
||||
if faixa.tipo == "audio" and faixa.indice in configuracao.faixas_de_audio]
|
||||
if analisar_som and faixa.tipo == "audio"
|
||||
and faixa.indice in configuracao.faixas_de_audio]
|
||||
audio = [{"indice": faixa.indice, "nome": faixa.nome,
|
||||
"clipes": [{"identificador": clipe.identificador, "nome": clipe.nome,
|
||||
"inicio": clipe.intervalo_na_timeline.inicio, "fim": clipe.intervalo_na_timeline.fim}
|
||||
|
||||
@@ -38,6 +38,7 @@ class ConfiguracaoVisualDoScanner:
|
||||
resolucao_maxima: int = 1080
|
||||
faixas_de_video: tuple[int, ...] = ()
|
||||
faixas_de_audio: tuple[int, ...] = ()
|
||||
modo_de_analise: str = "ambos"
|
||||
recursos_vision: frozenset[str] = RECURSOS_VISION
|
||||
detectar_cenas: bool = True
|
||||
analisar_continuidade: bool = True
|
||||
@@ -56,6 +57,8 @@ class ConfiguracaoVisualDoScanner:
|
||||
maximo_de_frames_interpretados: int | None = None
|
||||
|
||||
def __post_init__(self) -> None:
|
||||
if self.modo_de_analise not in {"som", "imagem", "ambos"}:
|
||||
raise ValueError("modo_de_analise deve ser som, imagem ou ambos.")
|
||||
if not 0.04 <= self.intervalo_em_segundos <= 60:
|
||||
raise ValueError("intervalo_em_segundos deve estar entre 0,04 e 60.")
|
||||
if self.resolucao_maxima != 0 and not 240 <= self.resolucao_maxima <= 8640:
|
||||
@@ -83,6 +86,7 @@ class ConfiguracaoVisualDoScanner:
|
||||
resolucao_maxima=int(dados.get("resolucao_maxima", 1080)),
|
||||
faixas_de_video=tuple(sorted(set(int(item) for item in dados.get("faixas_de_video", ())))),
|
||||
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")),
|
||||
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)),
|
||||
@@ -103,6 +107,7 @@ class ConfiguracaoVisualDoScanner:
|
||||
"resolucao_maxima": self.resolucao_maxima,
|
||||
"faixas_de_video": list(self.faixas_de_video),
|
||||
"faixas_de_audio": list(self.faixas_de_audio),
|
||||
"modo_de_analise": self.modo_de_analise,
|
||||
"recursos_vision": sorted(self.recursos_vision),
|
||||
"detectar_cenas": self.detectar_cenas,
|
||||
"analisar_continuidade": self.analisar_continuidade,
|
||||
|
||||
Reference in New Issue
Block a user