feat: corrigida a tela Editar vídeo para iniciar pela análise do S
- corrigida a tela Editar vídeo para iniciar pela análise do Scanner e exibir somente o fluxo pós-Scanner Resumo: - 4 arquivos alterados - 0 novos - 4 modificados - 0 removidos 4 files changed, 104 insertions(+), 6 deletions(-) Arquivos: - .jhonny/analises.db - code/cep-plugin/index.html - code/cep-plugin/main.js - code/cep-plugin/styles.css
This commit is contained in:
+93
-3
@@ -2025,6 +2025,93 @@ var silenceState = {
|
||||
speakerTurns: [],
|
||||
};
|
||||
|
||||
function silenceLocalizarUltimoRelatorioDoScanner() {
|
||||
var raiz = scannerOutputRoot();
|
||||
var candidatos = [];
|
||||
try {
|
||||
fs.readdirSync(raiz).forEach(function (nomeDaPasta) {
|
||||
var pasta = path.join(raiz, nomeDaPasta);
|
||||
var relatorio = path.join(pasta, nomeDaPasta + "-resultado.json");
|
||||
if (fs.existsSync(relatorio)) candidatos.push(relatorio);
|
||||
});
|
||||
} catch (_) {}
|
||||
candidatos.sort(function (a, b) {
|
||||
try { return fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs; } catch (_) { return 0; }
|
||||
});
|
||||
return candidatos[0] || null;
|
||||
}
|
||||
|
||||
function silenceConverterRelatorioDoScannerParaTranscricao(caminhoDoRelatorio, dadosDoRelatorio) {
|
||||
var segmentos = [];
|
||||
(dadosDoRelatorio.artefatos && dadosDoRelatorio.artefatos.audio || []).forEach(function (nomeDoArquivo) {
|
||||
var caminhoDoAudio = path.join(path.dirname(caminhoDoRelatorio), nomeDoArquivo);
|
||||
if (!fs.existsSync(caminhoDoAudio)) return;
|
||||
var dadosDoAudio;
|
||||
try { dadosDoAudio = JSON.parse(fs.readFileSync(caminhoDoAudio, "utf-8")); } catch (_) { return; }
|
||||
(dadosDoAudio.segmentos_por_clipe || []).forEach(function (grupo) {
|
||||
(grupo.segmentos || []).forEach(function (segmento) {
|
||||
segmentos.push({
|
||||
start: Number(segmento.inicio), end: Number(segmento.fim),
|
||||
inicio: Number(segmento.inicio), fim: Number(segmento.fim),
|
||||
text: segmento.texto || "", texto: segmento.texto || "",
|
||||
confidence: segmento.confianca, confianca: segmento.confianca,
|
||||
speaker: segmento.falante, falante: segmento.falante,
|
||||
caracteristicas_acusticas: segmento.caracteristicas_acusticas || {},
|
||||
words: segmento.palavras || [], palavras: segmento.palavras || [],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
segmentos.sort(function (a, b) { return a.start - b.start; });
|
||||
return { version: 1, segments: segmentos, origem: "scanner" };
|
||||
}
|
||||
|
||||
function silenceLoadScannerAnalysis() {
|
||||
var status = document.getElementById("scannerAnalysisStatus");
|
||||
var info = document.getElementById("scannerAnalysisInfo");
|
||||
setBusy("btnLoadScannerAnalysis", true);
|
||||
var caminhoDoRelatorio = silenceLocalizarUltimoRelatorioDoScanner();
|
||||
if (!caminhoDoRelatorio) {
|
||||
setBusy("btnLoadScannerAnalysis", false);
|
||||
status.textContent = "Não encontrada";
|
||||
info.textContent = "Execute o Scanner primeiro para criar uma análise reutilizável.";
|
||||
showToast("err", info.textContent);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
var dadosDoRelatorio = JSON.parse(fs.readFileSync(caminhoDoRelatorio, "utf-8"));
|
||||
var sequencia = dadosDoRelatorio.sequencia || {};
|
||||
silenceState.sequenceId = sequencia.id || null;
|
||||
silenceState.sequenceName = sequencia.nome || path.basename(caminhoDoRelatorio);
|
||||
silenceState.mediaPath = null;
|
||||
silenceState.fileBaseName = path.basename(path.dirname(caminhoDoRelatorio));
|
||||
silenceState.outputDir = path.dirname(caminhoDoRelatorio);
|
||||
silenceState.transcriptPath = path.join(silenceState.outputDir, "transcricao-do-scanner.json");
|
||||
silenceState.cachedTranscriptPath = null;
|
||||
fs.writeFileSync(silenceState.transcriptPath, JSON.stringify(
|
||||
silenceConverterRelatorioDoScannerParaTranscricao(caminhoDoRelatorio, dadosDoRelatorio), null, 2), "utf-8");
|
||||
var transcricao = JSON.parse(fs.readFileSync(silenceState.transcriptPath, "utf-8"));
|
||||
var quantidade = transcricao.segments.length;
|
||||
status.textContent = "Carregada";
|
||||
info.textContent = silenceState.sequenceName + " · " + quantidade + " trecho(s) vindos do Scanner.";
|
||||
setStep(3, "ready", "Pronto");
|
||||
setStep(4, "ready", "Pronto");
|
||||
setStep(5, "locked", "Bloqueado");
|
||||
document.getElementById("btnBuildPlan").disabled = false;
|
||||
document.getElementById("btnDiarize").disabled = true;
|
||||
document.getElementById("btnVoiceFeatures").disabled = true;
|
||||
document.getElementById("silenceDiarizeInfo").textContent = "Os falantes disponíveis vieram da análise do Scanner.";
|
||||
document.getElementById("silenceVoiceFeaturesInfo").textContent = "As métricas disponíveis vieram da análise do Scanner.";
|
||||
silenceLog("Análise do Scanner carregada: " + quantidade + " trecho(s).", "ok");
|
||||
showToast("ok", "Análise do Scanner carregada.");
|
||||
} catch (erro) {
|
||||
status.textContent = "Erro";
|
||||
info.textContent = "Não foi possível ler a análise: " + erro.message;
|
||||
showToast("err", info.textContent);
|
||||
}
|
||||
setBusy("btnLoadScannerAnalysis", false);
|
||||
}
|
||||
|
||||
var speakerAudioPlayer = null;
|
||||
var speakerAudioQueue = null;
|
||||
|
||||
@@ -3578,9 +3665,12 @@ function downloadModel(model, btn, approxMB) {
|
||||
renderEditorPersonalities();
|
||||
restaurarConfiguracaoDeLegendas();
|
||||
|
||||
// Passo 1 é o único liberado até o vídeo ser detectado.
|
||||
setStep(1, "ready", "Comece aqui");
|
||||
lockStepsFrom(2);
|
||||
// A aba Editar vídeo começa com a análise já produzida pelo Scanner.
|
||||
setStep(1, "locked", "Scanner");
|
||||
setStep(2, "locked", "Scanner");
|
||||
setStep(3, "ready", "Aguardando análise");
|
||||
setStep(4, "locked", "Aguardando análise");
|
||||
setStep(5, "locked", "Aguardando plano");
|
||||
|
||||
log("MCP for Adobe Premiere Pro CEP connector loaded");
|
||||
setStatus("waiting", "Aguardando — a ponte está iniciando");
|
||||
|
||||
Reference in New Issue
Block a user