From 400c3c93dd6e931252124c6be89812e8b5498026 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Henrique?= Date: Tue, 8 Sep 2026 18:40:52 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20destacado=20no=20deploy=20o=20resumo=20?= =?UTF-8?q?que=20ser=C3=A1=20gravado=20na=20mensagem=20do?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - destacado no deploy o resumo que será gravado na mensagem do commit Resumo: - 8 arquivos alterados - 1 novos - 7 modificados - 0 removidos 7 files changed, 143 insertions(+), 11 deletions(-) Arquivos: - .jhonny/analises.db - admin/deploy.command - code/engine/executar_scanner.py - code/engine/integracoes/midia/__init__.py - code/engine/integracoes/visual/apple_vision.py - code/engine/scanner/configuracao_visual.py - code/engine/scanner/visual.py - code/engine/integracoes/midia/compactador_de_proxy.py --- .jhonny/analises.db | Bin 155648 -> 520192 bytes admin/deploy.command | 12 +- code/engine/executar_scanner.py | 42 +++++ code/engine/integracoes/midia/__init__.py | 6 +- .../integracoes/midia/compactador_de_proxy.py | 170 ++++++++++++++++++ .../engine/integracoes/visual/apple_vision.py | 35 +++- code/engine/scanner/configuracao_visual.py | 22 +++ code/engine/scanner/visual.py | 37 +++- 8 files changed, 313 insertions(+), 11 deletions(-) create mode 100644 code/engine/integracoes/midia/compactador_de_proxy.py diff --git a/.jhonny/analises.db b/.jhonny/analises.db index 6ffc55b197ca26f17f6df036acb4b9a33ba0fdbe..0e884699b09d685eac598d192f5cc76b2ac50f57 100644 GIT binary patch literal 520192 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 z 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 delta 1436 zcmeH{%}*0S7{+&Ix4Z3jyVDw@NDEy)ihu%DFw#I{BR4Km1tlQ`ss>_WplYH7Gr6`M5(bDWT_zro=cgc+%WG%klK-Qv8Vh7#)GK1F8541chgQt+hRB}n_ znXmwpsVO1EkHwYoQQ({l0ZvJBLtw3DEajXV1ze~;pO+bQ0x|L<`LN@o5OfPFs%(E5cpj0RM)+#LKub0|Kg|oRNC>O9gH2fFO`^@bf;{ zAz!@~*{3m|!Fu~)IFB$tWmcEp@9(KQc(Mnd>xTigFDz@W8mhqMUqM)7)h4z;*iOQ# zD9a_`aF+Mscm`}&yN)5vxtFSN{)&;d$HY>EX?0anmP@PE>Z-?+-+&%fK_ysPHEiXS zZP}uFJN4?rJo!*7dsD@^xm_o^USBXoqhqemT;xA4@E-Z`*xBSnEsS_%izCLM2dF`QEf+arWT(@Sj78uO{0n%# BWI_M{ diff --git a/admin/deploy.command b/admin/deploy.command index 4242ff7..7fc09e5 100755 --- a/admin/deploy.command +++ b/admin/deploy.command @@ -27,6 +27,7 @@ BRANCH="main" GRN="$(tput setaf 2 2>/dev/null)"; YLW="$(tput setaf 3 2>/dev/null)" RD="$(tput setaf 1 2>/dev/null)"; BLU="$(tput setaf 4 2>/dev/null)" +BD="$(tput bold 2>/dev/null)" NC="$(tput sgr0 2>/dev/null)" say() { echo "${BLU}== ${NC}$*"; } ok() { echo "${GRN}-> OK ${NC}$*"; } @@ -99,7 +100,8 @@ else BODY="(sem nota em DEV-NOTES.md)" fi -COMMIT_MSG="feat: $(echo "$BODY" | head -1 | cut -c1-50) +ASSUNTO="$(echo "$BODY" | head -1 | sed 's/^[[:space:]]*[-*][[:space:]]*//' | cut -c1-60)" +COMMIT_MSG="feat: $ASSUNTO $BODY @@ -114,10 +116,12 @@ $STAT Arquivos: $FILES" -say "Mensagem do commit:" -echo "----------------------------------------------" +echo +echo "${BD}${YLW}============================================================${NC}" +echo "${BD}${YLW} MENSAGEM QUE SERÁ GRAVADA NO COMMIT${NC}" +echo "${BD}${YLW}============================================================${NC}" echo "$COMMIT_MSG" -echo "----------------------------------------------" +echo "${BD}${YLW}============================================================${NC}" echo if [[ "${DRY:-0}" = "1" ]]; then diff --git a/code/engine/executar_scanner.py b/code/engine/executar_scanner.py index a0a2f57..ffe902c 100644 --- a/code/engine/executar_scanner.py +++ b/code/engine/executar_scanner.py @@ -15,13 +15,41 @@ CAMINHO_DO_CODIGO = Path(__file__).resolve().parent.parent if str(CAMINHO_DO_CODIGO) not in sys.path: sys.path.insert(0, str(CAMINHO_DO_CODIGO)) + +def _encontrar_caminho_da_midia() -> str: + """Localiza a pasta com ``ffmpeg``/``ffprobe`` para o PATH dos subprocessos. + + O Premiere é aberto pelo Finder/LaunchServices (sem shell de login), então o + PATH herdado pelo painel não costuma trazer ``/opt/homebrew/bin``. Essa + função devolve o primeiro caminho conhecido onde essas ferramentas existem, + ou string vazia quando nenhum é encontrado. + """ + for candidato in ("/opt/homebrew/bin", "/usr/local/bin"): + if Path(candidato, "ffprobe").is_file() or Path(candidato, "ffmpeg").is_file(): + return candidato + return "" + + +# O mesmo ajuste de PATH já usado em ``admin/deploy.command`` e +# ``admin/install.command``: sem ele, a extração de frames e a transcrição +# falham com ``No such file or directory: 'ffprobe'``. +CAMINHO_DA_MIDIA = _encontrar_caminho_da_midia() +if CAMINHO_DA_MIDIA: + os.environ["PATH"] = CAMINHO_DA_MIDIA + os.pathsep + os.environ.get("PATH", "") + from engine.integracoes.premiere.conversores import ConversorDeTimeline from engine.scanner import ConfiguracaoVisualDoScanner, criar_detector_apple_vision, gerar_relatorio_visual from engine.scanner.transcricao_da_timeline import TranscricaoDaTimeline +from engine.persistencia import RepositorioDeAnalisesSQLite, RepositorioDeTimelineSQLite MODELO_DIARIZACAO_PADRAO = "pyannote/speaker-diarization-community-1" +# O padrão do banco de análises é ``.jhonny/analises.db`` relativo ao cwd, mas o +# painel roda o scanner com cwd ``code``. Fixamos o caminho absoluto na raiz do +# projeto para garantir que a gravação sempre caia no mesmo banco. +CAMINHO_DO_BANCO = CAMINHO_DO_CODIGO.parent / ".jhonny" / "analises.db" + def nome_seguro(nome: str) -> str: return re.sub(r"[^A-Za-z0-9._-]+", "-", nome.strip()).strip(".-") or "timeline" @@ -41,6 +69,13 @@ def executar(entrada: Path, saida: Path) -> Path: print(json.dumps({"evento": "progresso", "etapa": etapa, "percentual": round(percentual, 1), "clipe": clipe}, ensure_ascii=False), flush=True) + # Persistência: timeline/estrutura + análise visual + transcrição vão para o + # banco SQLite do projeto (mesmo dos relatórios gerados). + repositorio_de_timeline = RepositorioDeTimelineSQLite(CAMINHO_DO_BANCO) + repositorio_de_analises = RepositorioDeAnalisesSQLite(CAMINHO_DO_BANCO) + emitir("Persistindo timeline", 0) + repositorio_de_timeline.registrar_timeline(timeline) + resultados = [] for clipe in clipes: peso = max(1, math.ceil((clipe.intervalo_na_origem or clipe.intervalo_na_timeline).duracao / @@ -60,6 +95,11 @@ def executar(entrada: Path, saida: Path) -> Path: arquivo = Path(tempfile.gettempdir()) / f"scanner-{clipe.identificador}.json" gerar_relatorio_visual(clipe, resultado, arquivo, configuracao.intervalo_em_segundos) resultados.append(json.loads(arquivo.read_text(encoding="utf-8"))) + # Grava no banco os fatos visuais e as cenas detectadas deste clipe. + repositorio_de_analises.registrar_evidencias_visuais( + timeline.identificador, clipe.identificador, resultado.evidencias) + repositorio_de_analises.registrar_cenas( + timeline.identificador, resultado.cenas, clipe.identificador) except Exception as erro: resultados.append({"clipe": {"identificador": clipe.identificador, "nome": clipe.nome, "arquivo_original": clipe.arquivo}, "erro": str(erro)}) @@ -111,6 +151,8 @@ def executar(entrada: Path, saida: Path) -> Path: transcricoes = TranscricaoDaTimeline(provider, diretoria_de_trabalho=pasta / ".cache-audio", diarizador=diarizador).executar( Timeline(timeline.identificador, timeline.nome, faixas=faixas_de_audio)) + # Persiste a transcrição (segmentos + falas) no banco de análises. + repositorio_de_analises.registrar_transcricoes(timeline.identificador, transcricoes) for transcricao in transcricoes: transcricoes_por_clipe[transcricao.identificador_do_clipe] = [ {"inicio": item.inicio, "fim": item.fim, "texto": item.texto, diff --git a/code/engine/integracoes/midia/__init__.py b/code/engine/integracoes/midia/__init__.py index 1be4bf4..f6fd5ce 100644 --- a/code/engine/integracoes/midia/__init__.py +++ b/code/engine/integracoes/midia/__init__.py @@ -1,4 +1,8 @@ +from .compactador_de_proxy import (CompactadorDeProxy, ExtratorDeQuadrosDoProxy, + RESOLUCAO_PADRAO_DO_PROXY) from .extracao_de_audio import ExtracaoDeAudio, ParteDeAudio from .extracao_de_metadados import ExtracaoDeMetadados, MetadadosDoArquivo -__all__ = ["ExtracaoDeAudio", "ExtracaoDeMetadados", "MetadadosDoArquivo", "ParteDeAudio"] +__all__ = ["CompactadorDeProxy", "ExtracaoDeAudio", "ExtracaoDeMetadados", + "ExtratorDeQuadrosDoProxy", "MetadadosDoArquivo", "ParteDeAudio", + "RESOLUCAO_PADRAO_DO_PROXY"] diff --git a/code/engine/integracoes/midia/compactador_de_proxy.py b/code/engine/integracoes/midia/compactador_de_proxy.py new file mode 100644 index 0000000..56c43d4 --- /dev/null +++ b/code/engine/integracoes/midia/compactador_de_proxy.py @@ -0,0 +1,170 @@ +"""Transcodifica vídeos de origem para um proxy leve usado na leitura visual e de cenas. + +O gargalo de ler frames direto dos arquivos de origem (ex.: MOV com vários GB) +está em buscar com ``-ss`` em arquivos pesados e não indexados. Este módulo +produz, uma única vez por arquivo e por resolução, uma cópia leve (proxy) em +H.264 com keyframes frequentes e ``+faststart``, sem áudio. Toda a análise +visual e detecção de cena passa a ler desse proxy, que é pequeno, tem seek +rápido e leitura sequencial barata — enquanto o arquivo original fica intocado +para áudio/transcrição. +""" + +from __future__ import annotations + +import hashlib +from pathlib import Path +import subprocess + +from ...dominio.entidades.modelos import Clipe, IntervaloDeTempo +from ..visual.contratos import ExtratorDeQuadros + +# Resolução padrão do proxy: Full HD (1080) — mantém a qualidade de leitura +# visual (faces/OCR/pose) num arquivo bem mais leve e rápido de processar do +# que o original em 4K. O formato H.264/MP4 +faststart com keyframes frequentes +# é o que torna o seek barato. +RESOLUCAO_PADRAO_DO_PROXY = 1080 + +# Prazo máximo para transcodificar um único arquivo (protetor contra falhas). +LIMITE_DE_TEMPO_DA_TRANSCODIFICACAO = 1800 # 30 min + + +class CompactadorDeProxy: + """Transcodifica arquivos de vídeo para um proxy leve e o reaproveita.""" + + def __init__(self, ffmpeg: str = "ffmpeg", ffprobe: str = "ffprobe", + diretorio_de_cache: str | Path | None = None, + largura_maxima: int = RESOLUCAO_PADRAO_DO_PROXY) -> None: + self.ffmpeg = ffmpeg + self.ffprobe = ffprobe + self.largura_maxima = int(largura_maxima) + self.diretorio_de_cache = ( + Path(diretorio_de_cache) if diretorio_de_cache + else Path.home() / ".cache" / "premiere-mcp" / "proxies" + ) + self.diretorio_de_cache.mkdir(parents=True, exist_ok=True) + + def obter(self, arquivo: str | Path, + largura_maxima: int | None = None) -> Path: + """Devolve o caminho do proxy do arquivo, gerando-o quando necessário. + + O proxy é idempotente: se ele já existir e o arquivo de origem não tiver + mudado desde a última geração, devolve o caminho sem re-transcodificar. + """ + largura = int(largura_maxima or self.largura_maxima) + origem = Path(arquivo).expanduser().resolve(strict=False) + if not origem.is_file(): + raise FileNotFoundError(f"Arquivo de origem não encontrado: {origem}") + + proxy = self._caminho_do_proxy(origem, largura) + if proxy.is_file() and self._proxies_sao_validos(origem, proxy): + return proxy + + self._transcodificar(origem, proxy, largura) + return proxy + + def obter_por_clipe(self, clipe, + largura_maxima: int | None = None) -> Path | None: + """Devolve o proxy do arquivo do clipe, ou None quando não houver arquivo. + + Se o clipe for offline ou não tiver arquivo, devolve None (sem proxy). + """ + if not getattr(clipe, "arquivo", None) or getattr(clipe, "offline", False): + return None + try: + return self.obter(clipe.arquivo, largura_maxima=largura_maxima) + except (FileNotFoundError, RuntimeError): + return None + + # ------------------------------------------------------------------ internos + + def _caminho_do_proxy(self, origem: Path, largura_maxima: int) -> Path: + """Monta o nome estável do proxy a partir do caminho e da largura.""" + resumo = hashlib.sha1(str(origem).encode("utf-8")).hexdigest()[:12] + return self.diretorio_de_cache / f"{origem.stem}-{resumo}-{largura_maxima}p.mp4" + + @staticmethod + def _alteracao_do_arquivo(caminho: Path) -> float: + """Última alteração do arquivo, útil para detectar que a origem mudou.""" + try: + return caminho.stat().st_mtime_ns + except OSError: + return 0.0 + + def _proxies_sao_validos(self, origem: Path, proxy: Path) -> bool: + """O proxy é válido só se nasceu depois do arquivo de origem mudar.""" + return proxy.stat().st_mtime_ns >= self._alteracao_do_arquivo(origem) + + def _transcodificar(self, origem: Path, proxy: Path, largura_maxima: int) -> None: + """Transcodifica o arquivo de origem para o proxy H.264 de leitura visual.""" + comando = [ + self.ffmpeg, "-y", "-hide_banner", "-loglevel", "error", + "-i", str(origem), + "-map", "0:v:0", + "-vf", ( + f"scale=w={largura_maxima}:h={largura_maxima}:" + "force_original_aspect_ratio=decrease" + ), + "-c:v", "libx264", "-preset", "veryfast", "-crf", "28", + "-g", "30", "-keyint_min", "30", "-sc_threshold", "0", + "-pix_fmt", "yuv420p", + "-an", + "-movflags", "+faststart", + str(proxy), + ] + try: + processo = subprocess.run( + comando, capture_output=True, text=True, + timeout=LIMITE_DE_TEMPO_DA_TRANSCODIFICACAO, + ) + except subprocess.TimeoutExpired as exc: + raise RuntimeError( + f"Transcodificação do proxy excedeu o tempo: {origem}" + ) from exc + if processo.returncode != 0 or not proxy.is_file(): + detalhe = (processo.stderr or processo.stdout or "").strip() + raise RuntimeError( + f"Não foi possível gerar o proxy de {origem}: {detalhe}" + ) + + +def _clipe_com_arquivo(clipe: Clipe, caminho: Path) -> Clipe: + """Devolve uma cópia do clipe com o ``arquivo`` substituído pelo caminho dado. + + Mantém a identidade, os intervalos e os metadados; só troca o arquivo lido. + """ + origem = clipe.intervalo_na_origem + return Clipe( + identificador=clipe.identificador, + nome=clipe.nome, + intervalo_na_timeline=clipe.intervalo_na_timeline, + intervalo_na_origem=IntervaloDeTempo(origem.inicio, origem.fim) if origem else None, + arquivo=str(caminho), + identificador_da_faixa=clipe.identificador_da_faixa, + offline=clipe.offline, + metadados=clipe.metadados, + ) + + +class ExtratorDeQuadrosDoProxy: + """Extrai frames de um clipe a partir do seu proxy, sem duplicar lógica. + + Delega todo o trabalho ao ``ExtratorDeQuadrosFFmpeg`` informado, apontando-o + para o proxy. Os timestamps continuam relativos ao tempo do arquivo original, + pois o proxy preserva a mesma cronologia. + """ + + def __init__(self, extrator: ExtratorDeQuadros, compactador: CompactadorDeProxy, + largura_maxima: int | None = None) -> None: + self.extrator = extrator + self.compactador = compactador + self.largura_maxima = largura_maxima + + def extrair(self, clipe: Clipe) -> list: + """Extrai frames usando o proxy; usa o arquivo original quando não há proxy.""" + proxy = ( + self.compactador.obter_por_clipe(clipe) + if self.largura_maxima is None + else self.compactador.obter_por_clipe(clipe, largura_maxima=self.largura_maxima) + ) + alvo = clipe if proxy is None else _clipe_com_arquivo(clipe, proxy) + return self.extrator.extrair(alvo) \ No newline at end of file diff --git a/code/engine/integracoes/visual/apple_vision.py b/code/engine/integracoes/visual/apple_vision.py index d288afd..242ee4f 100644 --- a/code/engine/integracoes/visual/apple_vision.py +++ b/code/engine/integracoes/visual/apple_vision.py @@ -143,17 +143,25 @@ class AnalisadorAppleVisionNativo(AnalisadorDeFrame): def __init__(self, recursos: tuple[str, ...] = RECURSOS_PADRAO, interpretar_com_apple_intelligence: bool = True, executor: ExecutorDoRunnerApple | None = None, - timeout_em_segundos: float = 90.0) -> None: + timeout_em_segundos: float = 90.0, + maximo_de_frames_interpretados: int | None = None) -> None: self.recursos = recursos self.interpretar_com_apple_intelligence = interpretar_com_apple_intelligence self.executor = executor or ExecutorDoRunnerApple() self.timeout_em_segundos = timeout_em_segundos + # Limita quantos frames por clipe fazem a interpretação editorial (Apple + # Intelligence / Foundation Models), que é a parte mais cara. Os demais + # frames continuam com a análise visual completa. None = interpreta todos. + self.maximo_de_frames_interpretados = maximo_de_frames_interpretados - def analisar(self, quadro: QuadroDeVideo) -> list[EvidenciaVisual]: + def analisar(self, quadro: QuadroDeVideo, interpretar: bool | None = None) -> list[EvidenciaVisual]: if quadro.caminho is None: raise ValueError("Apple Vision requer que o frame tenha caminho persistido em disco.") + if self._indices_para_interpretar and quadro.indice not in self._indices_para_interpretar: + interpretar = False + deve_interpretar = interpretar if interpretar is not None else self.interpretar_com_apple_intelligence dados = self.executor.executar({"frame": str(quadro.caminho), "recursos": list(self.recursos), - "resumir": self.interpretar_com_apple_intelligence}, + "resumir": deve_interpretar}, self.timeout_em_segundos) evidencias = [self._converter(item, quadro) for item in dados.get("evidencias", [])] avisos = dados.get("avisos", []) @@ -162,6 +170,27 @@ class AnalisadorAppleVisionNativo(AnalisadorDeFrame): {"avisos": avisos, "recursos_solicitados": list(self.recursos)}, provider=self.nome)) return evidencias + def preparar_interpretacao_por_clipe(self, quantidade_de_frames: int) -> None: + """Marca os índices de frames que receberão a interpretação editorial. + + Distribui a interpretação ao longo do clipe (início, pontos médios e fim) + em vez de aplicar a todos os frames, mantendo a cobertura de cena com + custo muito menor. Quando não há limite (None), interpreta todos. + """ + if self.maximo_de_frames_interpretados is None or quantidade_de_frames <= 0: + self._indices_para_interpretar = set(range(quantidade_de_frames)) + return + quantidade = min(quantidade_de_frames, max(1, self.maximo_de_frames_interpretados)) + indices = set() + if quantidade_de_frames == 1: + indices.add(0) + else: + passo = max(1, quantidade_de_frames // quantidade) + indices = set(range(0, quantidade_de_frames, passo)) | {quantidade_de_frames - 1} + self._indices_para_interpretar = {i for i in indices if i < quantidade_de_frames} + + _indices_para_interpretar: set[int] = set() + def _converter(self, item: dict[str, Any], quadro: QuadroDeVideo) -> EvidenciaVisual: return EvidenciaVisual(item["tipo"], quadro.timestamp, quadro.timestamp, item["valor"], confianca=item.get("confianca"), provider=self.nome, diff --git a/code/engine/scanner/configuracao_visual.py b/code/engine/scanner/configuracao_visual.py index 05adcb2..74c114e 100644 --- a/code/engine/scanner/configuracao_visual.py +++ b/code/engine/scanner/configuracao_visual.py @@ -3,6 +3,8 @@ from dataclasses import dataclass from typing import Any +from ..integracoes.midia import RESOLUCAO_PADRAO_DO_PROXY + RECURSOS_VISION = frozenset(( "faces", "qualidade_facial", "pessoas", "pose", "maos", "ocr", "categorias", @@ -21,6 +23,13 @@ SENSIBILIDADES_VISUAIS: dict[str, float] = { } +def _inteiro_ou_nulo(valor: Any) -> int | None: + """Converte um valor de perfil em int, preservando None.""" + if valor is None or valor == "": + return None + return int(valor) + + @dataclass(frozen=True) class ConfiguracaoVisualDoScanner: """Interface curta para uma execução de leitura visual da timeline.""" @@ -38,6 +47,13 @@ class ConfiguracaoVisualDoScanner: usar_analise_visual: bool = False detectar_cortes: bool = True sensibilidade: str = "media" + # Leitura via proxy compactado. Para arquivos de origem pesados (MOV de + # vários GB), ler os frames de uma cópia leve é muito mais rápido. + usar_proxy: bool = True + resolucao_do_proxy: int = RESOLUCAO_PADRAO_DO_PROXY + # Limita quantos frames por clipe recebem a interpretação editorial da Apple + # Intelligence (Foundation Models) — a etapa mais cara. None interpreta todos. + maximo_de_frames_interpretados: int | None = None def __post_init__(self) -> None: if not 0.04 <= self.intervalo_em_segundos <= 60: @@ -75,6 +91,9 @@ class ConfiguracaoVisualDoScanner: usar_analise_visual=bool(dados.get("usar_analise_visual", False)), detectar_cortes=bool(dados.get("detectar_cortes", True)), sensibilidade=str(dados.get("sensibilidade", "media")), + usar_proxy=bool(dados.get("usar_proxy", True)), + resolucao_do_proxy=int(dados.get("resolucao_do_proxy", RESOLUCAO_PADRAO_DO_PROXY)), + maximo_de_frames_interpretados=_inteiro_ou_nulo(dados.get("maximo_de_frames_interpretados", None)), ) def para_dict(self) -> dict[str, Any]: @@ -92,4 +111,7 @@ class ConfiguracaoVisualDoScanner: "usar_analise_visual": self.usar_analise_visual, "detectar_cortes": self.detectar_cortes, "sensibilidade": self.sensibilidade, + "usar_proxy": self.usar_proxy, + "resolucao_do_proxy": self.resolucao_do_proxy, + "maximo_de_frames_interpretados": self.maximo_de_frames_interpretados, } diff --git a/code/engine/scanner/visual.py b/code/engine/scanner/visual.py index 2dbd8b1..ea9a78a 100644 --- a/code/engine/scanner/visual.py +++ b/code/engine/scanner/visual.py @@ -40,6 +40,7 @@ class DetectorDeCenas: def detectar(self, clipe: Clipe) -> ResultadoVisualDoClipe: quadros = self.extrator.extrair(clipe) + self._preparar_analisadores(quadros) total = len(quadros) * len(self.analisadores_de_frame) + len(self.analisadores_de_sequencia) progresso = [0] evidencias = self._analisar_quadros(quadros, progresso, total) + self._analisar_sequencia(quadros, progresso, total) @@ -51,6 +52,19 @@ class DetectorDeCenas: ) for cena in cenas] return ResultadoVisualDoClipe(clipe.identificador, evidencias, cenas, cenas_visuais) + def _preparar_analisadores(self, quadros: list[QuadroDeVideo]) -> None: + """Prepara analisadores que precisam saber a quantidade de frames do clipe. + + Caso especial do `AnalisadorAppleVisionNativo`: ele distribui a + interpretação editorial (Apple Intelligence / Foundation Models) em um + subconjunto dos frames para manter a cobertura de cena com custo menor. + """ + quantidade_de_quadros = len(quadros) + for analisador in self.analisadores_de_frame: + preparar = getattr(analisador, "preparar_interpretacao_por_clipe", None) + if callable(preparar): + preparar(quantidade_de_quadros) + def _analisar_quadros(self, quadros: list[QuadroDeVideo], progresso: list[int] | None = None, total: int = 0) -> list[EvidenciaVisual]: if not self.analisadores_de_frame or not quadros: @@ -205,18 +219,35 @@ def criar_detector_apple_vision( from ..integracoes.visual import (AnalisadorAppleVisionNativo, AnalisadorSequenciaAppleVisionNativo, ExtratorDeQuadrosFFmpeg) + from ..integracoes.midia import CompactadorDeProxy, ExtratorDeQuadrosDoProxy perfil = configuracao or ConfiguracaoVisualDoScanner(intervalo_em_segundos=intervalo_em_segundos) + # Quantidade fixa de trabalhadores para extração e análise de frames. + # Em volumes externos (ex.: /Volumes/Merongo), mais threads do que isso + # satura a E/S e trava os processos de mídia a ~0% de CPU. + QUANTIDADE_DE_TRABALHADORES = 4 + + extrator = ExtratorDeQuadrosFFmpeg(intervalo_em_segundos=perfil.intervalo_em_segundos, + diretorio_de_cache=diretorio_de_cache or ".frames", + resolucao_maxima=perfil.resolucao_maxima, + trabalhadores_em_paralelo=QUANTIDADE_DE_TRABALHADORES) + # Leitura via proxy compactado: para arquivos pesados, evita buscar frame + # por frame no arquivo original (um -ss por frame num MOV de vários GB). + if perfil.usar_proxy: + extrator = ExtratorDeQuadrosDoProxy( + extrator, CompactadorDeProxy(), largura_maxima=perfil.resolucao_do_proxy + ) + return DetectorDeCenas( - ExtratorDeQuadrosFFmpeg(intervalo_em_segundos=perfil.intervalo_em_segundos, - diretorio_de_cache=diretorio_de_cache or ".frames", - resolucao_maxima=perfil.resolucao_maxima), + extrator, analisadores_de_frame=[AnalisadorAppleVisionNativo( recursos=tuple(sorted(perfil.recursos_vision)), interpretar_com_apple_intelligence=perfil.interpretar_cena, + maximo_de_frames_interpretados=perfil.maximo_de_frames_interpretados, )], analisadores_de_sequencia=[AnalisadorSequenciaAppleVisionNativo()] if perfil.analisar_continuidade else [], detectores_de_intervalo=_detectores_de_cena_do_perfil(perfil), + trabalhadores_em_paralelo=QUANTIDADE_DE_TRABALHADORES, )