criado repositório jhonny-editor no Gitea adicionado script admin/deploy.command com commit automático atualizado admin/DEV-NOTES.md com template limpo Resumo: - 48 arquivos alterados - 26 novos - 19 modificados - 3 removidos 22 files changed, 658 insertions(+), 568 deletions(-) Arquivos: - AGENTS.md - admin/DEV-NOTES.md - admin/OpenCut.command - admin/commit.command - admin/deploy.command - admin/update.command - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/ARQUITETURA.md - code/engine/arquitetura/README.md - code/engine/gerar_relatorio_timeline.py - code/engine/integracoes/apple_speech/apple_speech_transcriber.swift - code/engine/integracoes/apple_speech/provider_de_transcricao_apple.py - code/engine/integracoes/midia/__init__.py - code/engine/integracoes/whisper/provider_de_transcricao_local.py - code/engine/scanner/__init__.py - code/engine/scanner/coordenacao/__init__.py - code/engine/scanner/descoberta/__init__.py - code/engine/scanner/modelos.py - code/engine/scanner/transcricao_da_timeline.py - code/src/tools/discovery.ts - :memory:.ses - admin/Jhonny.command - admin/inativos/OpenCut.command - admin/inativos/update.command - code/docs/glossario-analise-emocional.md - code/docs/levantamento-apple-vision-e-apple-intelligence.md - code/docs/levantamento-ferramentas-analise-visual-local.md - code/engine/arquitetura/biblioteca-inteligente-de-videos.md - code/engine/executar_scanner.py - code/engine/integracoes/huggingface/ - code/engine/integracoes/midia/extracao_de_metadados.py - code/engine/integracoes/visual/ - code/engine/requirements-visual.txt - code/engine/scanner/configuracao_visual.py - code/engine/scanner/descoberta/descoberta_de_arquivos.py - code/engine/scanner/metadados.py - code/engine/scanner/relatorio_visual.py - code/engine/scanner/retakes/ - code/engine/scanner/visual.py - code/engine/testes/test_analise_visual_local.py - code/engine/testes/test_arquivos_e_metadados.py - code/engine/testes/test_provider_de_transcricao_apple.py - code/relatorios/analise-brools/ - code/relatorios/analise-visual/ - code/relatorios/audio/arquivos/ - code/relatorios/transcricao-timeline.md
41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
from typing import Protocol
|
|
|
|
from ..integracoes.midia.extracao_de_metadados import (
|
|
ExtracaoDeMetadados as ExtratorDeMetadados,
|
|
MetadadosDoArquivo,
|
|
)
|
|
from .coordenacao import ContextoDeAnalise
|
|
|
|
|
|
class ExtratorDeMetadadosProtocol(Protocol):
|
|
def extrair(self, arquivo: str) -> MetadadosDoArquivo: ...
|
|
|
|
|
|
class ExtracaoDeMetadados:
|
|
"""Enriquece cada clipe com os metadados técnicos do seu arquivo."""
|
|
|
|
nome = "extracao_de_metadados"
|
|
|
|
def __init__(self, extrator: ExtratorDeMetadadosProtocol | None = None) -> None:
|
|
self.extrator = extrator or ExtratorDeMetadados()
|
|
|
|
def executar(self, contexto: ContextoDeAnalise) -> ContextoDeAnalise:
|
|
for identificador, arquivo in contexto.arquivos.items():
|
|
if arquivo.offline:
|
|
continue
|
|
try:
|
|
metadados = self.extrator.extrair(str(arquivo.caminho))
|
|
contexto.metadados_dos_arquivos[identificador] = metadados
|
|
for faixa in contexto.timeline.faixas if contexto.timeline else []:
|
|
for clipe in faixa.clipes:
|
|
if clipe.identificador == identificador:
|
|
clipe.metadados["arquivo"] = metadados
|
|
break
|
|
except Exception as exc:
|
|
# Uma mídia inválida não deve descartar os resultados dos demais clipes.
|
|
contexto.erros.append(f"metadados_indisponiveis: {arquivo.caminho}: {exc}")
|
|
return contexto
|
|
|
|
|
|
__all__ = ["ExtracaoDeMetadados", "MetadadosDoArquivo"]
|