- Adicionado estrutura completa do projeto - Configurado MCP server para Premiere Pro - Adicionado documentação e skills - Configurado Gitignore para o projeto
118 lines
7.5 KiB
Markdown
118 lines
7.5 KiB
Markdown
# 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)
|