Files
jhonny-editor/code/engine/arquitetura/plano-apple-intelligence-video.md
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

118 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Plano de leitura de vídeo com tecnologias Apple
## Conclusão
O caminho recomendado é um pipeline híbrido, local e substituível:
1. `FFmpeg` continua extraindo áudio e amostras de vídeo.
2. `Speech` faz a transcrição temporal do áudio no macOS, preferencialmente com `supportsOnDeviceRecognition` e `requiresOnDeviceRecognition` quando disponíveis.
3. `Vision` analisa os quadros: OCR, pessoas/objetos, rostos, códigos, poses e mudanças de cena conforme a necessidade.
4. `FoundationModels` (Apple Intelligence) recebe um pacote compacto de evidências — transcrição, descrições dos quadros, OCR e metadados — e produz resumo, tópicos, classificação e sugestões editoriais estruturadas.
O modelo de linguagem não deve receber o arquivo de vídeo inteiro como entrada direta. A documentação do Foundation Models descreve geração e entendimento de texto, geração estruturada, ferramentas e análise de imagens; a análise de vídeo deve ser orquestrada pelo nosso pipeline, ou por um provider multimodal próprio no futuro.
## O que já existe no Engine
- `engine/scanner/analise.py` já define `ProviderDeTranscricao` e `ProviderDeAnaliseVisual`.
- `engine/scanner/transcricao_da_timeline.py` já divide o resultado por clipe e corrige os offsets das partes.
- `engine/integracoes/midia/extracao_de_audio.py` já gera WAV mono, 16 kHz e blocos de até 600 s.
- `engine/integracoes/apple_speech/` já possui um executável Swift usando `SFSpeechRecognizer` e um provider Python.
- `engine/integracoes/whisper/` fornece fallback local.
O relatório Apple atual confirma que o adaptador está integrado ao fluxo, mas também evidencia uma falha operacional a investigar: a execução reportada não encontrou fala em todos os intervalos. Antes de comparar qualidade, devemos validar permissão, disponibilidade do locale, formato/volume do WAV e se o modo on-device foi realmente ativado.
## Tecnologias disponíveis
### Speech
`SFSpeechRecognizer` aceita arquivos existentes com `SFSpeechURLRecognitionRequest`, fornece segmentos com timestamp e expõe `supportsOnDeviceRecognition`. Há limite documentado para tarefas longas, portanto a divisão existente em blocos é adequada. O provider deve manter os offsets, a confiança e o locale.
### Vision
Vision é a camada Apple para análise de fotos e vídeos. Para o primeiro corte, implementar apenas:
- `RecognizeTextRequest` para texto em tela;
- detecção de pessoas/objetos ou classificação, se a decisão editorial exigir;
- amostragem temporal de quadros e agrupamento de resultados semelhantes;
- detecção de mudança de cena, caso a implementação determinística atual ainda não cubra o caso.
Vision não deve ser chamado em todos os frames. O sampler deve escolher, por exemplo, um frame a cada 1–2 segundos e frames próximos a cortes, mantendo `timestamp`, `confidence` e a origem do frame.
### Foundation Models / Apple Intelligence
`FoundationModels` fornece o LLM local que alimenta Apple Intelligence. É adequado para resumir a transcrição, extrair entidades/tópicos, classificar trechos, sugerir títulos e gerar estruturas Swift com `@Generable`. A disponibilidade precisa ser verificada em runtime por `SystemLanguageModel.default`; Apple Intelligence precisa estar habilitado e o sistema/dispositivo precisa ser compatível.
O contexto deve ser limitado e particionado. A documentação técnica da Apple indica janela de contexto de 4096 tokens para o modelo on-device; enviar o vídeo inteiro ou uma transcrição longa em uma única solicitação não é seguro. O contrato deve prever `truncation`, `modelUnavailable`, `guardrail` e `timeout`.
### App Intents
É uma opção posterior para expor ações do Engine ao Siri/Apple Intelligence — por exemplo, “resumir o clipe selecionado” ou “encontrar trechos em que se fala de X”. Não é a API de leitura do vídeo; é a camada de descoberta e ação.
## Arquitetura proposta
```text
Timeline/clip
├─ AudioExtractor ──> AppleSpeechProvider | WhisperProvider
├─ FrameSampler ────> VisionProvider
└─ MediaEvidenceStore
└─ FoundationModelsProvider
└─ AnalysisResult / EditorialPlan
```
Adicionar interfaces no domínio, mantendo o scanner independente:
```python
class ProviderDeQuadros(Protocol):
def amostrar(self, clipe: Any) -> list[QuadroDeVideo]: ...
class ProviderDeAnaliseSemantica(Protocol):
def interpretar(self, evidencias: PacoteDeEvidencias) -> ResultadoSemantico: ...
```
`QuadroDeVideo` deve conter `timestamp`, caminho temporário ou bytes, dimensões e índice. `EvidenciaDeVideo` deve conter tipo (`transcricao`, `ocr`, `objeto`, `cena`), intervalo temporal, valor, confiança e provider. O resultado do Foundation Models deve ser estruturado e validado antes de entrar em `caracteristicas_visuais`, `cenas` ou plano de edição.
## Implementação em fases
### Fase 1 — endurecer Apple Speech
- Corrigir o build/instalação do executável Swift para o ambiente do usuário.
- Tornar `somente_no_dispositivo=True` a opção explícita de privacidade.
- Capturar stderr, código de saída, locale, disponibilidade e modo efetivo no resultado.
- Testar WAV com fala conhecida em `pt-BR`, inclusive blocos menores que um minuto.
- Comparar Apple Speech, Whisper e Groq usando o mesmo áudio e medir WER, latência e falhas.
### Fase 2 — Vision
- Criar um pequeno helper Swift ou um app/CLI macOS que receba vídeo, timestamps e operações.
- Usar AVFoundation para ler frames; usar Vision por frame.
- Devolver JSON versionado, com timestamp absoluto e confiança.
- Adicionar testes com fixtures de texto em tela, pessoa e quadro sem conteúdo.
### Fase 3 — Foundation Models
- Criar um processo Swift residente (mais eficiente que iniciar um processo por trecho).
- Receber JSON de evidências via stdin/stdout ou IPC existente.
- Usar `LanguageModelSession` e geração guiada para um `ResultadoSemantico` fixo.
- Fazer chunking da transcrição e uma segunda etapa de consolidação.
- Persistir prompt/model-version/evidence revision para reprodutibilidade.
### Fase 4 — integração editorial
- Alimentar o `EditorialContextPack` com evidências citáveis e intervalos temporais.
- Manter análise e plano como operações read-only até validação.
- Só depois conectar resultados a rough-cut, marcadores ou legendas via APIs já existentes do Premiere.
## Decisão recomendada agora
Implementar primeiro `AppleSpeechProvider` robusto e `VisionEvidenceProvider`; deixar `FoundationModelsProvider` como uma etapa semântica posterior. Isso entrega leitura real de áudio e imagem imediatamente, preserva fallback para Windows/Whisper e evita acoplar o Engine Python a APIs Apple que só existem no macOS.
## Fontes oficiais
- [Foundation Models](https://developer.apple.com/documentation/FoundationModels)
- [Generating content and performing tasks with Foundation Models](https://developer.apple.com/documentation/FoundationModels/generating-content-and-performing-tasks-with-foundation-models)
- [Foundation Models updates](https://developer.apple.com/documentation/Updates/FoundationModels)
- [Built-in intelligence](https://developer.apple.com/documentation/technologyoverviews/built-in-intelligence)
- [SFSpeechRecognizer](https://developer.apple.com/documentation/speech/sfspeechrecognizer)
- [Apple Intelligence para desenvolvedores](https://developer.apple.com/apple-intelligence/)
- [TN3193 — context window](https://developer.apple.com/documentation/Technotes/tn3193-managing-the-on-device-foundation-model-s-context-window)