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: - 32 arquivos alterados - 16 novos - 15 modificados - 0 removidos 16 files changed, 638 insertions(+), 61 deletions(-) Arquivos: - code/engine/skills/boas-praticas-oo.md -> .agents/skills/boas-praticas-oo/SKILL.md - AGENTS.md - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css - code/engine/integracoes/visual/apple_vision.py - code/engine/integracoes/visual/apple_vision_runner.swift - code/engine/integracoes/visual/extrator_ffmpeg.py - code/engine/scanner/__init__.py - code/engine/scanner/configuracao_visual.py - code/engine/scanner/coordenacao/__init__.py - code/engine/scanner/retakes/adaptador_de_falas.py - code/engine/scanner/retakes/agrupador_de_takes.py - code/engine/scanner/retakes/detector_de_reinicios.py - code/engine/scanner/retakes/modelos_de_retakes.py - code/engine/scanner/visual.py - .jhonny/ - .retakes/ - CODING_STANDARDS.md - code/engine/executar_retakes.py - code/engine/persistencia/ - code/engine/scanner/retakes/__init__.py - code/engine/scanner/retakes/carregador_de_artefatos.py - code/engine/scanner/retakes/classificador_de_retakes.py - code/engine/scanner/retakes/coordenador_de_retakes.py - code/engine/scanner/retakes/deteccao_de_retakes.py - code/engine/scanner/retakes/gerador_de_evidencias.py - code/engine/scanner/retakes/repositorio_de_retakes.py - code/engine/testes/test_consultas_de_persistencia.py - code/engine/testes/test_deteccao_de_retakes.py - code/engine/testes/test_persistencia_sqlite.py - code/relatorios/audio/arquivos/92f97877259a86a8095b1eecafdefe357212a12247d04b78df60e0c0ae38b2ea/
167 lines
4.9 KiB
Python
167 lines
4.9 KiB
Python
"""DDL do banco SQLite de análises (vídeo, imagem e áudio)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
|
|
_DDL = """
|
|
CREATE TABLE IF NOT EXISTS videos (
|
|
id TEXT PRIMARY KEY,
|
|
nome TEXT,
|
|
duracao REAL,
|
|
taxa_de_quadros REAL,
|
|
largura INTEGER,
|
|
altura INTEGER,
|
|
criado_em TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS faixas (
|
|
id TEXT NOT NULL,
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
nome TEXT,
|
|
tipo TEXT,
|
|
indice INTEGER,
|
|
PRIMARY KEY (video_id, id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS clipes (
|
|
id TEXT NOT NULL,
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
faixa_id TEXT NOT NULL,
|
|
nome TEXT,
|
|
inicio_na_timeline REAL NOT NULL,
|
|
fim_na_timeline REAL NOT NULL,
|
|
inicio_na_origem REAL,
|
|
fim_na_origem REAL,
|
|
arquivo TEXT,
|
|
offline INTEGER NOT NULL DEFAULT 0,
|
|
metadados TEXT,
|
|
PRIMARY KEY (video_id, id),
|
|
FOREIGN KEY (video_id, faixa_id) REFERENCES faixas(video_id, id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_clipes_faixa ON clipes(video_id, faixa_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS arquivos (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
video_id TEXT REFERENCES videos(id) ON DELETE CASCADE,
|
|
caminho TEXT NOT NULL,
|
|
formato TEXT,
|
|
duracao REAL,
|
|
codec_de_video TEXT,
|
|
codec_de_audio TEXT,
|
|
largura INTEGER,
|
|
altura INTEGER,
|
|
taxa_de_quadros REAL,
|
|
canais_de_audio INTEGER,
|
|
taxa_de_amostragem INTEGER,
|
|
tamanho_em_bytes INTEGER,
|
|
orientacao TEXT,
|
|
timecode TEXT,
|
|
hash_do_conteudo TEXT,
|
|
UNIQUE (video_id, caminho)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS analises_versao (
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
etapa TEXT NOT NULL,
|
|
hash_versao TEXT NOT NULL,
|
|
concluido_em TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
|
|
PRIMARY KEY (video_id, etapa)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS segmentos_de_transcricao (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
clipe_id TEXT NOT NULL,
|
|
inicio REAL NOT NULL,
|
|
fim REAL NOT NULL,
|
|
texto TEXT NOT NULL,
|
|
confianca REAL,
|
|
falante TEXT,
|
|
voz_aparente TEXT,
|
|
confianca_voz REAL,
|
|
emocao TEXT,
|
|
confianca_emocao REAL,
|
|
caracteristicas_acusticas TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_segmentos_video_clipe
|
|
ON segmentos_de_transcricao(video_id, clipe_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS palavras_de_transcricao (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
segmento_id INTEGER NOT NULL REFERENCES segmentos_de_transcricao(id) ON DELETE CASCADE,
|
|
ordem INTEGER NOT NULL,
|
|
texto TEXT NOT NULL,
|
|
inicio REAL NOT NULL,
|
|
fim REAL NOT NULL,
|
|
confianca REAL,
|
|
falante TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_palavras_segmento ON palavras_de_transcricao(segmento_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS evidencias_visuais (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
clipe_id TEXT NOT NULL,
|
|
tipo TEXT NOT NULL,
|
|
inicio REAL NOT NULL,
|
|
fim REAL NOT NULL,
|
|
valor TEXT NOT NULL,
|
|
confianca REAL,
|
|
provider TEXT NOT NULL,
|
|
modelo TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_evidencias_video_clipe
|
|
ON evidencias_visuais(video_id, clipe_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS cenas (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
clipe_id TEXT,
|
|
inicio REAL NOT NULL,
|
|
fim REAL NOT NULL,
|
|
confianca REAL,
|
|
referencias TEXT
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_cenas_video ON cenas(video_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS grupos_de_retake (
|
|
id TEXT PRIMARY KEY,
|
|
video_id TEXT NOT NULL REFERENCES videos(id) ON DELETE CASCADE,
|
|
faixa_id TEXT NOT NULL,
|
|
tipo TEXT NOT NULL,
|
|
confianca REAL NOT NULL,
|
|
criado_em TEXT NOT NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_grupos_video ON grupos_de_retake(video_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS tomadas_de_retake (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
grupo_id TEXT NOT NULL REFERENCES grupos_de_retake(id) ON DELETE CASCADE,
|
|
ordem INTEGER NOT NULL,
|
|
fala_id TEXT NOT NULL,
|
|
segmento_id TEXT NOT NULL,
|
|
inicio REAL NOT NULL,
|
|
fim REAL NOT NULL,
|
|
texto TEXT NOT NULL,
|
|
similaridade_com_anterior REAL NOT NULL,
|
|
confianca REAL NOT NULL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_tomadas_grupo ON tomadas_de_retake(grupo_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS evidencias_de_retake (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
grupo_id TEXT NOT NULL REFERENCES grupos_de_retake(id) ON DELETE CASCADE,
|
|
tipo TEXT NOT NULL,
|
|
descricao TEXT NOT NULL,
|
|
valor REAL
|
|
);
|
|
CREATE INDEX IF NOT EXISTS idx_evidencias_retake_grupo ON evidencias_de_retake(grupo_id);
|
|
"""
|
|
|
|
|
|
def criar_esquema(conexao: sqlite3.Connection) -> None:
|
|
"""Cria (de forma idempotente) todas as tabelas do banco de análises."""
|
|
conexao.executescript(_DDL)
|
|
conexao.commit()
|