feat: removido o tamanho do modelo do seletor da tela Editar vídeo
- removido o tamanho do modelo do seletor da tela Editar vídeo - acelerada a transcrição do Scanner com inferência Whisper em lote e cache de hashes - garantido um resultado separado para cada clipe de áudio selecionado no Scanner - adicionado cancelamento do processamento do Scanner pela barra de progresso - exibido estado visual próprio para Scanner cancelado na barra de progresso - criado modo explícito de análise do Scanner para separar som, imagem ou ambos - adicionadas métricas opcionais de fala ao Scanner com análise acústica na engine - corrigido o progresso da transcrição do Scanner durante o processamento do Whisper - refatorado o runner Swift do Apple Vision para executar requests em lote com retry CPU-only, corrigindo falhas de CVPixelBuffer/ANE/OCR - documentado o fluxo de edição de vídeo por voz integrado ao Scanner, banco e engine - formalizado o protocolo de edição por chat com perfil editorial e consultas progressivas - gerado plano JSON de corte para depoimento vertical da Erika no Instagram - esquematizado o fluxo de colar e executar planos da IA pela engine após o Scanner - ajustado o plano para manter somente as três etapas existentes da tela de edição - adicionado processamento incremental de locutores e métricas no Scanner com confirmação de reprocessamento - implementado o plano JSON colado na tela e a persistência idempotente das análises do Scanner Resumo: - 8 arquivos alterados - 1 novos - 7 modificados - 0 removidos 7 files changed, 437 insertions(+), 55 deletions(-) Arquivos: - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/executar_scanner.py - code/engine/persistencia/repositorio_de_analises_sqlite.py - code/engine/testes/test_persistencia_sqlite.py - docs/PLANO-EDICAO-DE-VIDEO-POR-VOZ.md - code/relatorios/plano-edicao-depoimento-erika-instagram.json
This commit is contained in:
@@ -65,6 +65,56 @@ class RepositorioDeAnalisesSQLite:
|
||||
for segmento in transcricao.segmentos:
|
||||
self._inserir_segmento(video_id, transcricao.identificador_do_clipe, segmento)
|
||||
|
||||
def substituir_transcricoes(
|
||||
self, video_id: str, transcricoes: Iterable[TranscricaoDoClipe],
|
||||
) -> None:
|
||||
"""Substitui a transcrição somente dos clipes recebidos.
|
||||
|
||||
O método torna o reprocessamento idempotente sem apagar análises de
|
||||
outros clipes ou faixas que não participaram da execução atual.
|
||||
"""
|
||||
with self.conexao:
|
||||
self._garantir_video(video_id)
|
||||
transcricoes_materializadas = tuple(transcricoes)
|
||||
for transcricao in transcricoes_materializadas:
|
||||
self.conexao.execute(
|
||||
"""DELETE FROM segmentos_de_transcricao
|
||||
WHERE video_id = ? AND clipe_id = ?""",
|
||||
(video_id, transcricao.identificador_do_clipe),
|
||||
)
|
||||
for segmento in transcricao.segmentos:
|
||||
self._inserir_segmento(video_id, transcricao.identificador_do_clipe, segmento)
|
||||
|
||||
def atualizar_enriquecimento_de_transcricao(
|
||||
self,
|
||||
video_id: str,
|
||||
clipe_id: str,
|
||||
inicio: float,
|
||||
fim: float,
|
||||
*,
|
||||
falante: str | None = None,
|
||||
caracteristicas_acusticas: dict[str, object] | None = None,
|
||||
) -> None:
|
||||
"""Atualiza diarização e métricas de um segmento já persistido."""
|
||||
campos = []
|
||||
parametros: list[object] = []
|
||||
if falante is not None:
|
||||
campos.append("falante = ?")
|
||||
parametros.append(falante)
|
||||
if caracteristicas_acusticas is not None:
|
||||
campos.append("caracteristicas_acusticas = ?")
|
||||
parametros.append(json.dumps(caracteristicas_acusticas, ensure_ascii=False))
|
||||
if not campos:
|
||||
return
|
||||
parametros.extend((video_id, clipe_id, inicio, fim))
|
||||
with self.conexao:
|
||||
self.conexao.execute(
|
||||
f"""UPDATE segmentos_de_transcricao
|
||||
SET {', '.join(campos)}
|
||||
WHERE video_id = ? AND clipe_id = ? AND inicio = ? AND fim = ?""",
|
||||
parametros,
|
||||
)
|
||||
|
||||
def _inserir_segmento(
|
||||
self, video_id: str, clipe_id: str, segmento: SegmentoDeTranscricao,
|
||||
) -> int:
|
||||
|
||||
Reference in New Issue
Block a user