feat: aprimorado o preview de falantes na tela Refinar para reprod

- aprimorado o preview de falantes na tela Refinar para reproduzir os trechos do vídeo
- corrigida a leitura dos timestamps do preview de falantes usando os clipes do banco
- alterado o preview de falantes para reproduzir diretamente na timeline ativa do Premiere
- evitadas reinicializações concorrentes durante o monitoramento do preview na timeline
- substituído o polling contínuo por temporização de cada trecho do preview
- restaurado o preview de áudio dos falantes usando o WAV da transcrição
- corrigida a localização do WAV de transcrição ao carregar análises existentes
- atualizado o cabeçalho do painel CEP para Jhonny Marrone com ícone de lâmpada mágica

Resumo:
- 4 arquivos alterados
- 0 novos
- 4 modificados
- 0 removidos

 4 files changed, 39 insertions(+), 5 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:
João Henrique
2026-09-10 10:04:54 -04:00
parent becdc3afd5
commit 37698ba62a
4 changed files with 39 additions and 5 deletions
+30 -3
View File
@@ -2246,8 +2246,28 @@ function silenceConsultarPreviewDeFalantes(videoId) {
} catch (_) { return null; }
}
function silenceLocalizarAudioParaFalantes(pasta) {
function silenceLocalizarAudioParaFalantes(pasta, dadosDoRelatorio) {
var encontrados = [];
var nomesDeMidia = [];
function adicionarNomeDeMidia(nome) {
if (!nome) return;
var base = path.parse(String(nome)).name;
if (base && nomesDeMidia.indexOf(base) < 0) nomesDeMidia.push(base);
}
adicionarNomeDeMidia(silenceState.mediaPath);
var artefatosDeAudio = dadosDoRelatorio && dadosDoRelatorio.artefatos && dadosDoRelatorio.artefatos.audio || [];
artefatosDeAudio.forEach(function (nomeDoArtefato) {
try {
var caminhoDoArtefato = path.join(pasta, nomeDoArtefato);
var dadosDoAudio = JSON.parse(fs.readFileSync(caminhoDoArtefato, "utf-8"));
(dadosDoAudio.faixa && dadosDoAudio.faixa.clipes || []).forEach(function (clipe) {
adicionarNomeDeMidia(clipe.nome || clipe.arquivo || clipe.sourceFile);
});
} catch (_) {}
});
function visitar(caminho) {
if (encontrados.length) return;
try {
@@ -2261,7 +2281,14 @@ function silenceLocalizarAudioParaFalantes(pasta) {
} catch (_) {}
}
visitar(pasta);
return encontrados[0] || null;
if (encontrados.length) return encontrados[0];
for (var indice = 0; indice < nomesDeMidia.length; indice++) {
var pastaDaTranscricao = path.join(SILENCE_OUTPUT_ROOT, nomesDeMidia[indice]);
var caminhoDoAudio = path.join(pastaDaTranscricao, nomesDeMidia[indice] + ".wav");
if (fs.existsSync(caminhoDoAudio)) return caminhoDoAudio;
}
return null;
}
function silenceLocalizarMidiaNoRelatorio(caminhoDoRelatorio, dadosDoRelatorio) {
@@ -2300,7 +2327,7 @@ function silenceLoadScannerAnalysis() {
silenceState.mediaPath = silenceLocalizarMidiaNoRelatorio(caminhoDoRelatorio, dadosDoRelatorio);
silenceState.fileBaseName = path.basename(path.dirname(caminhoDoRelatorio));
silenceState.outputDir = path.dirname(caminhoDoRelatorio);
silenceState.audioCachePath = silenceLocalizarAudioParaFalantes(silenceState.outputDir);
silenceState.audioCachePath = silenceLocalizarAudioParaFalantes(silenceState.outputDir, dadosDoRelatorio);
silenceState.transcriptPath = path.join(silenceState.outputDir, "transcricao-do-scanner.json");
silenceState.cachedTranscriptPath = null;
silenceState.tipoVideoId = null;