feat: exibida a quantidade de falantes detectados e o campo para n

- exibida a quantidade de falantes detectados e o campo para nomeá-los na guia Editar vídeo
- reposicionado o formulário de nomes dos falantes para ficar abaixo da opção de diarização

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

 2 files changed, 17 insertions(+), 12 deletions(-)

Arquivos:
  - code/cep-plugin/index.html
  - code/cep-plugin/main.js
This commit is contained in:
João Henrique
2026-09-09 10:15:03 -04:00
parent b6c1b79336
commit f3e8650a1a
2 changed files with 17 additions and 12 deletions
+11 -10
View File
@@ -138,6 +138,15 @@
<span>Detectar quem fala logo após transcrever</span> <span>Detectar quem fala logo após transcrever</span>
</label> </label>
<div class="speaker-config" id="silenceSpeakerConfig" hidden>
<div class="speaker-config-head">
<strong>Falantes detectados</strong>
<span id="silenceSpeakerCount"></span>
</div>
<p class="field-help">Dê um nome a cada falante e desative quem não deve aparecer no vídeo. A decisão será enviada no JSON para a IA.</p>
<div id="silenceSpeakerList"></div>
</div>
<div class="mini-action" id="silenceRemovalRow"> <div class="mini-action" id="silenceRemovalRow">
<div> <div>
<label class="checkbox-field" style="border:none;padding:0;background:none"> <label class="checkbox-field" style="border:none;padding:0;background:none">
@@ -169,19 +178,11 @@
<div class="step-body"> <div class="step-body">
<div class="mini-action"> <div class="mini-action">
<div> <div>
<strong>Quem fala</strong> <strong>Detecção de falantes</strong>
<span id="silenceDiarizeInfo">Separa os locutores por trecho. Precisa do token Hugging Face.</span> <span id="silenceDiarizeInfo">Separa os falantes por trecho. Precisa do token Hugging Face.</span>
</div> </div>
<button id="btnDiarize" class="button" onclick="silenceDiarizeSpeakers()" type="button" disabled>Detectar</button> <button id="btnDiarize" class="button" onclick="silenceDiarizeSpeakers()" type="button" disabled>Detectar</button>
</div> </div>
<div class="speaker-config" id="silenceSpeakerConfig" hidden>
<div class="speaker-config-head">
<strong>Falantes identificados</strong>
<span id="silenceSpeakerCount"></span>
</div>
<p class="field-help">Dê um nome a cada falante e desative quem não deve aparecer no vídeo. A decisão será enviada no JSON para a IA.</p>
<div id="silenceSpeakerList"></div>
</div>
<div class="mini-action"> <div class="mini-action">
<div> <div>
<strong>Métricas de voz</strong> <strong>Métricas de voz</strong>
+6 -2
View File
@@ -1835,7 +1835,9 @@ function silenceDiarizeSpeakers() {
var parsed = null; var parsed = null;
try { parsed = JSON.parse(fs.readFileSync(silenceState.transcriptPath, "utf-8")).diarization; } catch (e) {} try { parsed = JSON.parse(fs.readFileSync(silenceState.transcriptPath, "utf-8")).diarization; } catch (e) {}
if (parsed && Array.isArray(parsed.speakers)) renderSpeakerConfiguration(parsed.speakers); if (parsed && Array.isArray(parsed.speakers)) renderSpeakerConfiguration(parsed.speakers);
var msg = parsed ? parsed.num_speakers + " locutor(es): " + parsed.speakers.join(", ") : "Locutores detectados."; var msg = parsed
? "Foram detectados " + parsed.num_speakers + (parsed.num_speakers === 1 ? " falante" : " falantes") + ": " + parsed.speakers.join(", ") + "."
: "Falantes detectados.";
silenceLog(msg, "ok"); silenceLog(msg, "ok");
info.textContent = msg; info.textContent = msg;
setStep(3, "done", "Enriquecido"); setStep(3, "done", "Enriquecido");
@@ -1865,7 +1867,8 @@ function renderSpeakerConfiguration(speakerIds) {
active: !old || old.active !== false, active: !old || old.active !== false,
}; };
}); });
count.textContent = silenceState.speakers.length + (silenceState.speakers.length === 1 ? " identificado" : " identificados"); count.textContent = silenceState.speakers.length +
(silenceState.speakers.length === 1 ? " falante detectado" : " falantes detectados");
list.innerHTML = ""; list.innerHTML = "";
silenceState.speakers.forEach(function (speaker, index) { silenceState.speakers.forEach(function (speaker, index) {
var row = document.createElement("div"); var row = document.createElement("div");
@@ -1877,6 +1880,7 @@ function renderSpeakerConfiguration(speakerIds) {
input.type = "text"; input.type = "text";
input.className = "select-field speaker-name-input"; input.className = "select-field speaker-name-input";
input.value = speaker.name; input.value = speaker.name;
input.placeholder = "Nome do falante";
input.maxLength = 120; input.maxLength = 120;
input.setAttribute("aria-label", "Nome de " + speaker.id); input.setAttribute("aria-label", "Nome de " + speaker.id);
input.addEventListener("input", function () { silenceState.speakers[index].name = input.value.trim() || speaker.id; }); input.addEventListener("input", function () { silenceState.speakers[index].name = input.value.trim() || speaker.id; });