feat: removidos da tela Editar vídeo os passos legados de transcri
- removidos da tela Editar vídeo os passos legados de transcrição, falantes e métricas. Resumo: - 4 arquivos alterados - 0 novos - 4 modificados - 0 removidos 4 files changed, 35 insertions(+), 161 deletions(-) Arquivos: - .jhonny/analises.db - admin/PremiereMCP.command - code/cep-plugin/index.html - code/cep-plugin/main.js
This commit is contained in:
Binary file not shown.
@@ -18,7 +18,7 @@
|
|||||||
# agente de IA buscar o codigo certo. Best-effort: se o
|
# agente de IA buscar o codigo certo. Best-effort: se o
|
||||||
# abre o tunel temporariamente quando necessario e fecha o
|
# abre o tunel temporariamente quando necessario e fecha o
|
||||||
# processo que este ciclo iniciou ao terminar.
|
# processo que este ciclo iniciou ao terminar.
|
||||||
# 4. LEMBRETE reinicie o Premiere Pro por completo para o painel
|
# 4. LEMBRETE recarregue somente a extensao CEP para o painel
|
||||||
# reinstalado ser carregado - este passo so imprime isso
|
# reinstalado ser carregado - este passo so imprime isso
|
||||||
#
|
#
|
||||||
# Nao mexe em git (este projeto nao e um repositorio git) e nao sobe
|
# Nao mexe em git (este projeto nao e um repositorio git) e nao sobe
|
||||||
@@ -199,19 +199,18 @@ elif run_step rag; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# 4) Lembrete de recarregar o painel dentro do Premiere
|
# 4) Lembrete de recarregar somente a extensao dentro do Premiere
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
if run_step reload; then
|
if run_step reload; then
|
||||||
step "4/4 REINICIAR O PREMIERE"
|
step "4/4 RECARREGAR A EXTENSAO CEP"
|
||||||
echo "O painel ja foi reinstalado (passo 1), mas o Premiere so carrega a"
|
echo "O painel ja foi reinstalado (passo 1). Para carregar a copia nova:"
|
||||||
echo "copia nova depois de um restart completo:"
|
echo " 1. Feche somente o painel MCP for Adobe Premiere Pro"
|
||||||
echo " 1. Feche o Premiere Pro por completo (Cmd+Q)"
|
echo " 2. Abra novamente em Window > Extensions > MCP for Adobe Premiere Pro"
|
||||||
echo " 2. Abra de novo e va em Window > Extensions > MCP for Adobe Premiere Pro"
|
echo " 3. Confira a aba Editar video e os passos Concluir edicao / Aplicar na timeline"
|
||||||
echo " 3. Confira se aparecem as abas 'Bridge' e 'Cortar silencio'"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
if [ "$FAILED" != "0" ]; then
|
if [ "$FAILED" != "0" ]; then
|
||||||
die "ciclo terminou com pendencias - corrija os avisos acima antes de testar no Premiere."
|
die "ciclo terminou com pendencias - corrija os avisos acima antes de testar no Premiere."
|
||||||
fi
|
fi
|
||||||
ok "Ciclo concluido. Pronto para recarregar o painel no Premiere."
|
ok "Ciclo concluido. Pronto para recarregar somente a extensao no Premiere."
|
||||||
|
|||||||
+6
-116
@@ -95,7 +95,7 @@
|
|||||||
|
|
||||||
<section class="card scanner-analysis-card" id="scannerAnalysisCard">
|
<section class="card scanner-analysis-card" id="scannerAnalysisCard">
|
||||||
<div class="card-head"><h2>Análise do Scanner</h2><span class="step-chip" id="scannerAnalysisStatus">Não carregada</span></div>
|
<div class="card-head"><h2>Análise do Scanner</h2><span class="step-chip" id="scannerAnalysisStatus">Não carregada</span></div>
|
||||||
<p class="field-help" id="scannerAnalysisInfo">Carregue a análise mais recente do Scanner antes de gerar o plano de edição.</p>
|
<p class="field-help" id="scannerAnalysisInfo">Carregue a análise mais recente do Scanner antes de concluir a edição.</p>
|
||||||
<ul class="scanner-analysis-checks" id="scannerAnalysisChecks" aria-label="Componentes carregados da análise">
|
<ul class="scanner-analysis-checks" id="scannerAnalysisChecks" aria-label="Componentes carregados da análise">
|
||||||
<li id="scannerCheckTranscription" data-state="pending"><span class="check-dot" aria-hidden="true"></span><span>Transcrição</span><em>Aguardando</em></li>
|
<li id="scannerCheckTranscription" data-state="pending"><span class="check-dot" aria-hidden="true"></span><span>Transcrição</span><em>Aguardando</em></li>
|
||||||
<li id="scannerCheckDiarization" data-state="pending"><span class="check-dot" aria-hidden="true"></span><span>Detecção de falantes</span><em>Aguardando</em></li>
|
<li id="scannerCheckDiarization" data-state="pending"><span class="check-dot" aria-hidden="true"></span><span>Detecção de falantes</span><em>Aguardando</em></li>
|
||||||
@@ -122,124 +122,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="step editar-video-legado" id="step2" data-state="locked">
|
<section class="step" id="step2" data-state="locked">
|
||||||
<div class="step-head">
|
<div class="step-head">
|
||||||
<span class="step-number" aria-hidden="true">2</span>
|
<span class="step-number" aria-hidden="true">2</span>
|
||||||
<div class="step-title">
|
|
||||||
<h2>Transcrever a fala</h2>
|
|
||||||
<p>Gera o texto com marcação de tempo usando o Whisper local.</p>
|
|
||||||
</div>
|
|
||||||
<span class="step-chip" id="step2Chip">Bloqueado</span>
|
|
||||||
</div>
|
|
||||||
<div class="step-body">
|
|
||||||
|
|
||||||
<div class="callout callout-info" id="silenceCachedSection" hidden>
|
|
||||||
<strong>Este vídeo já foi transcrito antes</strong>
|
|
||||||
<p>Reaproveite e pule direto para o plano de cortes — leva segundos em vez de minutos.</p>
|
|
||||||
<label class="field-label" for="silenceCachedSelect">Transcrição salva</label>
|
|
||||||
<select id="silenceCachedSelect" class="select-field"></select>
|
|
||||||
<button id="btnUseCachedTranscript" class="button button-primary" onclick="silenceUseCachedTranscript()" type="button">Usar esta transcrição</button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- LEGADO comentado em 2026-09-09: transcrição/diarização/métricas de voz
|
|
||||||
feitas aqui duplicavam o que a aba Scanner já faz e persiste no banco.
|
|
||||||
Funções JS correspondentes (silenceTranscribe, silenceDiarizeSpeakers,
|
|
||||||
silenceComputeVoiceFeatures) comentadas em main.js.
|
|
||||||
<div class="field-grid">
|
|
||||||
<div>
|
|
||||||
<label class="field-label" for="silenceModel">Modelo</label>
|
|
||||||
<select id="silenceModel" class="select-field">
|
|
||||||
<option value="small" selected>small (recomendado)</option>
|
|
||||||
<option value="base">base (mais rápido)</option>
|
|
||||||
<option value="medium">medium (mais preciso)</option>
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<span class="field-label">Idioma</span>
|
|
||||||
<p class="field-static" id="silenceLanguageInfo">Português</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<label class="checkbox-field">
|
|
||||||
<input type="checkbox" id="silenceDiarize">
|
|
||||||
<span>Detectar quem fala logo após transcrever</span>
|
|
||||||
</label>
|
|
||||||
|
|
||||||
<label class="checkbox-field">
|
|
||||||
<input type="checkbox" id="silenceVoiceFeaturesAuto">
|
|
||||||
<span>Calcular métricas de voz logo após transcrever</span>
|
|
||||||
</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>
|
|
||||||
<label class="checkbox-field" style="border:none;padding:0;background:none">
|
|
||||||
<input type="checkbox" id="silenceRemovalEnabled">
|
|
||||||
<span>Remoção de silêncios</span>
|
|
||||||
</label>
|
|
||||||
<span>Só grava a preferência no JSON — não corta nada aqui. A IA decide os cortes usando esse valor.</span>
|
|
||||||
</div>
|
|
||||||
<div style="display:flex;align-items:center;gap:6px;flex:0 0 auto">
|
|
||||||
<label class="field-label" for="silenceRemovalMinDuration" style="margin:0">Mín. (s)</label>
|
|
||||||
<input type="number" id="silenceRemovalMinDuration" class="select-field" style="width:64px" step="0.1" min="0" value="0.8">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- LEGADO comentado em 2026-09-09 (ver nota acima).
|
|
||||||
<button id="btnTranscribe" class="button button-primary" onclick="silenceTranscribe()" type="button" disabled>Transcrever</button>
|
|
||||||
<p class="field-help" id="silenceCacheInfo"></p>
|
|
||||||
-->
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<!-- LEGADO comentado em 2026-09-09: "Refazer" chamava silenceDiarizeSpeakers()
|
|
||||||
e silenceComputeVoiceFeatures(), agora comentadas em main.js — a aba
|
|
||||||
Refinar já cobre revisão de falantes com dados vindos do Scanner.
|
|
||||||
<section class="step step-optional" id="step3" data-state="locked">
|
|
||||||
<div class="step-head">
|
|
||||||
<span class="step-number" aria-hidden="true">3</span>
|
|
||||||
<div class="step-title">
|
|
||||||
<h2>Revisar falantes e áudio <span class="badge-optional">opcional</span></h2>
|
|
||||||
<p>Confira os resultados processados e ajuste os dados antes de gerar o JSON.</p>
|
|
||||||
</div>
|
|
||||||
<span class="step-chip" id="step3Chip">Bloqueado</span>
|
|
||||||
</div>
|
|
||||||
<div class="step-body">
|
|
||||||
<div class="mini-action">
|
|
||||||
<div>
|
|
||||||
<strong>Detecção de falantes</strong>
|
|
||||||
<span id="silenceDiarizeInfo">Separa os falantes por trecho. Precisa do token Hugging Face.</span>
|
|
||||||
</div>
|
|
||||||
<button id="btnDiarize" class="button" onclick="silenceDiarizeSpeakers()" type="button" disabled>Refazer</button>
|
|
||||||
</div>
|
|
||||||
<div class="mini-action">
|
|
||||||
<div>
|
|
||||||
<strong>Métricas de voz</strong>
|
|
||||||
<span id="silenceVoiceFeaturesInfo">Pitch, energia, velocidade de fala e pausas de cada trecho.</span>
|
|
||||||
</div>
|
|
||||||
<button id="btnVoiceFeatures" class="button" onclick="silenceComputeVoiceFeatures()" type="button" disabled>Refazer</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
-->
|
|
||||||
|
|
||||||
<section class="step" id="step4" data-state="locked">
|
|
||||||
<div class="step-head">
|
|
||||||
<span class="step-number" aria-hidden="true">4</span>
|
|
||||||
<div class="step-title">
|
<div class="step-title">
|
||||||
<h2>Concluir edição</h2>
|
<h2>Concluir edição</h2>
|
||||||
<p>Salva no banco a análise carregada, o tipo de vídeo e as configurações editoriais escolhidas. O JSON para a IA poderá ser gerado depois, quando necessário.</p>
|
<p>Salva no banco a análise carregada, o tipo de vídeo e as configurações editoriais escolhidas. O JSON para a IA poderá ser gerado depois, quando necessário.</p>
|
||||||
</div>
|
</div>
|
||||||
<span class="step-chip" id="step4Chip">Bloqueado</span>
|
<span class="step-chip" id="step2Chip">Bloqueado</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="step-body">
|
<div class="step-body">
|
||||||
<button id="btnBuildPlan" class="button button-primary" onclick="silenceConcluirEdicao()" type="button" disabled>Concluir edição</button>
|
<button id="btnBuildPlan" class="button button-primary" onclick="silenceConcluirEdicao()" type="button" disabled>Concluir edição</button>
|
||||||
@@ -255,14 +145,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section class="step" id="step5" data-state="locked">
|
<section class="step" id="step3" data-state="locked">
|
||||||
<div class="step-head">
|
<div class="step-head">
|
||||||
<span class="step-number" aria-hidden="true">5</span>
|
<span class="step-number" aria-hidden="true">3</span>
|
||||||
<div class="step-title">
|
<div class="step-title">
|
||||||
<h2>Aplicar na timeline</h2>
|
<h2>Aplicar na timeline</h2>
|
||||||
<p>Selecione o plano de edição que a IA devolveu (cortes, zooms, textos, marcadores) e execute na sequência.</p>
|
<p>Selecione o plano de edição que a IA devolveu (cortes, zooms, textos, marcadores) e execute na sequência.</p>
|
||||||
</div>
|
</div>
|
||||||
<span class="step-chip" id="step5Chip">Bloqueado</span>
|
<span class="step-chip" id="step3Chip">Bloqueado</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="step-body">
|
<div class="step-body">
|
||||||
<label class="field-label" for="editorialPlanJson">JSON de ações devolvido pela IA</label>
|
<label class="field-label" for="editorialPlanJson">JSON de ações devolvido pela IA</label>
|
||||||
|
|||||||
+21
-36
@@ -2151,11 +2151,13 @@ function silenceSelecionarTipoVideo() {
|
|||||||
if (!tipo) {
|
if (!tipo) {
|
||||||
document.getElementById("silenceTipoVideoInfo").textContent = "Selecione um tipo cadastrado para continuar.";
|
document.getElementById("silenceTipoVideoInfo").textContent = "Selecione um tipo cadastrado para continuar.";
|
||||||
setStep(1, "ready", "Selecione um tipo");
|
setStep(1, "ready", "Selecione um tipo");
|
||||||
|
setStep(2, "locked", "Selecione o tipo");
|
||||||
document.getElementById("btnBuildPlan").disabled = true;
|
document.getElementById("btnBuildPlan").disabled = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
document.getElementById("silenceTipoVideoInfo").textContent = tipo.nome + " · instruções serão incluídas no JSON para a IA.";
|
document.getElementById("silenceTipoVideoInfo").textContent = tipo.nome + " · instruções serão incluídas no JSON para a IA.";
|
||||||
setStep(1, "done", "Selecionado");
|
setStep(1, "done", "Selecionado");
|
||||||
|
setStep(2, "ready", "Pronto para concluir");
|
||||||
document.getElementById("btnBuildPlan").disabled = false;
|
document.getElementById("btnBuildPlan").disabled = false;
|
||||||
silenceLog("Tipo de vídeo selecionado: " + tipo.nome + ".", "ok");
|
silenceLog("Tipo de vídeo selecionado: " + tipo.nome + ".", "ok");
|
||||||
}
|
}
|
||||||
@@ -2371,10 +2373,9 @@ function silenceLoadScannerAnalysis() {
|
|||||||
info.textContent = silenceState.sequenceName + " · " + quantidade + " trecho(s) · " +
|
info.textContent = silenceState.sequenceName + " · " + quantidade + " trecho(s) · " +
|
||||||
(audioDoBanco.metricas_de_voz_disponiveis ? "métricas disponíveis" : "métricas não realizadas") + " · " +
|
(audioDoBanco.metricas_de_voz_disponiveis ? "métricas disponíveis" : "métricas não realizadas") + " · " +
|
||||||
(audioDoBanco.diarizacao_disponivel ? falantes.length + " falante(s)" : "diarização não realizada");
|
(audioDoBanco.diarizacao_disponivel ? falantes.length + " falante(s)" : "diarização não realizada");
|
||||||
setStep(3, "ready", "Pronto");
|
setStep(2, "locked", "Selecione o tipo");
|
||||||
setStep(1, "ready", "Selecione um tipo");
|
setStep(1, "ready", "Selecione um tipo");
|
||||||
setStep(4, "locked", "Selecione o tipo");
|
setStep(3, "locked", "Aguardando conclusão");
|
||||||
setStep(5, "locked", "Bloqueado");
|
|
||||||
renderizarTiposDeVideoParaEdicao();
|
renderizarTiposDeVideoParaEdicao();
|
||||||
document.getElementById("btnBuildPlan").disabled = true;
|
document.getElementById("btnBuildPlan").disabled = true;
|
||||||
// btnDiarize/btnVoiceFeatures/silenceDiarizeInfo/silenceVoiceFeaturesInfo ficavam no
|
// btnDiarize/btnVoiceFeatures/silenceDiarizeInfo/silenceVoiceFeaturesInfo ficavam no
|
||||||
@@ -2712,10 +2713,8 @@ function silenceDetectClip() {
|
|||||||
// muda — evita aplicar um plano gerado para outro material.
|
// muda — evita aplicar um plano gerado para outro material.
|
||||||
function lockStepsFrom(first) {
|
function lockStepsFrom(first) {
|
||||||
var buttons = {
|
var buttons = {
|
||||||
2: ["btnTranscribe"],
|
2: ["btnBuildPlan"],
|
||||||
3: ["btnDiarize", "btnVoiceFeatures"],
|
3: ["btnApplyEditorialActions"],
|
||||||
4: ["btnBuildPlan"],
|
|
||||||
5: ["btnApplyEditorialActions"],
|
|
||||||
};
|
};
|
||||||
for (var n = first; n <= 5; n++) {
|
for (var n = first; n <= 5; n++) {
|
||||||
setStep(n, "locked", "Bloqueado");
|
setStep(n, "locked", "Bloqueado");
|
||||||
@@ -2769,8 +2768,7 @@ function silenceUseCachedTranscript() {
|
|||||||
// Passos que dependem de existir uma transcrição, seja nova ou reaproveitada.
|
// Passos que dependem de existir uma transcrição, seja nova ou reaproveitada.
|
||||||
function unlockAfterTranscript() {
|
function unlockAfterTranscript() {
|
||||||
setStep(2, "done", "Transcrito");
|
setStep(2, "done", "Transcrito");
|
||||||
setStep(3, "ready", "Opcional");
|
setStep(2, "ready", "Pronto para concluir");
|
||||||
setStep(4, "ready", "Sua vez");
|
|
||||||
document.getElementById("btnBuildPlan").disabled = false;
|
document.getElementById("btnBuildPlan").disabled = false;
|
||||||
// btnDiarize/btnVoiceFeatures ficavam no step3 (legado, comentado em 2026-09-09).
|
// btnDiarize/btnVoiceFeatures ficavam no step3 (legado, comentado em 2026-09-09).
|
||||||
var elBtnDiarize = document.getElementById("btnDiarize");
|
var elBtnDiarize = document.getElementById("btnDiarize");
|
||||||
@@ -3264,14 +3262,6 @@ function silenceConcluirEdicao() {
|
|||||||
configuracao: {
|
configuracao: {
|
||||||
nome_do_tipo: silenceState.tipoVideo.nome,
|
nome_do_tipo: silenceState.tipoVideo.nome,
|
||||||
instrucoes_do_tipo: tipoVideoResumoParaJson(silenceState.tipoVideo),
|
instrucoes_do_tipo: tipoVideoResumoParaJson(silenceState.tipoVideo),
|
||||||
configuracoes_de_fala: speakerConfigurationForJson(),
|
|
||||||
configuracoes_de_edicao: {
|
|
||||||
remocao_de_silencio: {
|
|
||||||
habilitada: document.getElementById("silenceRemovalEnabled").checked,
|
|
||||||
duracao_minima_segundos: Number(document.getElementById("silenceRemovalMinDuration").value) || 0.8,
|
|
||||||
},
|
|
||||||
legendas: carregarConfiguracaoDeLegendas(),
|
|
||||||
},
|
|
||||||
transcricao: {
|
transcricao: {
|
||||||
caminho: silenceState.transcriptPath,
|
caminho: silenceState.transcriptPath,
|
||||||
origem: "Scanner",
|
origem: "Scanner",
|
||||||
@@ -3287,7 +3277,7 @@ function silenceConcluirEdicao() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setBusy("btnBuildPlan", true);
|
setBusy("btnBuildPlan", true);
|
||||||
setStep(4, "running", "Salvando…");
|
setStep(2, "running", "Salvando…");
|
||||||
taskStart("Concluindo a edição", "Salvando a configuração no banco");
|
taskStart("Concluindo a edição", "Salvando a configuração no banco");
|
||||||
silenceLog("Salvando o tipo de vídeo e as configurações editoriais no banco…");
|
silenceLog("Salvando o tipo de vídeo e as configurações editoriais no banco…");
|
||||||
runStreamed(
|
runStreamed(
|
||||||
@@ -3297,14 +3287,14 @@ function silenceConcluirEdicao() {
|
|||||||
function (codigo, ultimoErro) {
|
function (codigo, ultimoErro) {
|
||||||
setBusy("btnBuildPlan", false);
|
setBusy("btnBuildPlan", false);
|
||||||
if (codigo !== 0) {
|
if (codigo !== 0) {
|
||||||
setStep(4, "error", "Falhou");
|
setStep(2, "error", "Falhou");
|
||||||
taskEnd(false, "Não foi possível concluir a edição.", ultimoErro);
|
taskEnd(false, "Não foi possível concluir a edição.", ultimoErro);
|
||||||
silenceLog("Falha ao salvar a configuração editorial.", "err");
|
silenceLog("Falha ao salvar a configuração editorial.", "err");
|
||||||
showToast("err", ultimoErro || "Não foi possível salvar a edição no banco.");
|
showToast("err", ultimoErro || "Não foi possível salvar a edição no banco.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setStep(4, "done", "Edição concluída");
|
setStep(2, "done", "Edição concluída");
|
||||||
setStep(5, "locked", "Aguardando plano da IA");
|
setStep(3, "locked", "Aguardando plano da IA");
|
||||||
taskEnd(true, "Edição concluída e salva no banco.");
|
taskEnd(true, "Edição concluída e salva no banco.");
|
||||||
silenceLog("Edição concluída e salva no banco de análises.", "ok");
|
silenceLog("Edição concluída e salva no banco de análises.", "ok");
|
||||||
showToast("ok", "Edição concluída e salva no banco.");
|
showToast("ok", "Edição concluída e salva no banco.");
|
||||||
@@ -3323,20 +3313,15 @@ function silenceGenerateJson() {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setBusy("btnBuildPlan", true);
|
setBusy("btnBuildPlan", true);
|
||||||
setStep(4, "running", "Gerando…");
|
setStep(2, "running", "Gerando…");
|
||||||
silenceLog("Gerando arquivo JSON para a IA…");
|
silenceLog("Gerando arquivo JSON para a IA…");
|
||||||
try {
|
try {
|
||||||
var transcript = JSON.parse(fs.readFileSync(silenceState.transcriptPath, "utf-8"));
|
var transcript = JSON.parse(fs.readFileSync(silenceState.transcriptPath, "utf-8"));
|
||||||
var silenceEnabled = document.getElementById("silenceRemovalEnabled").checked;
|
|
||||||
var minSilence = parseFloat(document.getElementById("silenceRemovalMinDuration").value);
|
|
||||||
if (!isFinite(minSilence) || minSilence < 0) minSilence = 0.8;
|
|
||||||
|
|
||||||
transcript.sequence = {
|
transcript.sequence = {
|
||||||
name: silenceState.sequenceName,
|
name: silenceState.sequenceName,
|
||||||
media_path: silenceState.mediaPath,
|
media_path: silenceState.mediaPath,
|
||||||
};
|
};
|
||||||
transcript.settings = Object.assign({}, transcript.settings, {
|
transcript.settings = Object.assign({}, transcript.settings, {
|
||||||
silence_removal: { enabled: silenceEnabled, min_silence_seconds: minSilence },
|
|
||||||
legendas: carregarConfiguracaoDeLegendas(),
|
legendas: carregarConfiguracaoDeLegendas(),
|
||||||
});
|
});
|
||||||
transcript.speaker_configuration = speakerConfigurationForJson();
|
transcript.speaker_configuration = speakerConfigurationForJson();
|
||||||
@@ -3361,13 +3346,13 @@ function silenceGenerateJson() {
|
|||||||
document.getElementById("silencePlanInfo").textContent =
|
document.getElementById("silencePlanInfo").textContent =
|
||||||
"Envie este arquivo a um agente de IA externo. Ele deve devolver o plano de edição em JSON para o passo 5.";
|
"Envie este arquivo a um agente de IA externo. Ele deve devolver o plano de edição em JSON para o passo 5.";
|
||||||
|
|
||||||
setStep(4, "done", "JSON pronto");
|
setStep(2, "done", "JSON pronto");
|
||||||
setStep(5, "ready", "Sua vez");
|
setStep(3, "ready", "Sua vez");
|
||||||
document.getElementById("btnApplyEditorialActions").disabled = false;
|
document.getElementById("btnApplyEditorialActions").disabled = false;
|
||||||
showToast("ok", "JSON gerado: " + path.basename(out));
|
showToast("ok", "JSON gerado: " + path.basename(out));
|
||||||
silenceLog("JSON gerado em " + out + " (" + segCount + " trechos).", "ok");
|
silenceLog("JSON gerado em " + out + " (" + segCount + " trechos).", "ok");
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
setStep(4, "error", "Falhou");
|
setStep(2, "error", "Falhou");
|
||||||
showToast("err", "Falha ao gerar o JSON: " + e.message);
|
showToast("err", "Falha ao gerar o JSON: " + e.message);
|
||||||
silenceLog("Falha ao gerar o JSON: " + e.message, "err");
|
silenceLog("Falha ao gerar o JSON: " + e.message, "err");
|
||||||
}
|
}
|
||||||
@@ -3442,7 +3427,7 @@ function applyEditorialActions() {
|
|||||||
if (typeof window.confirm === "function" && !window.confirm(summary)) return;
|
if (typeof window.confirm === "function" && !window.confirm(summary)) return;
|
||||||
|
|
||||||
setBusy("btnApplyEditorialActions", true);
|
setBusy("btnApplyEditorialActions", true);
|
||||||
setStep(5, "running", "Aplicando…");
|
setStep(3, "running", "Aplicando…");
|
||||||
taskStart("Aplicando o plano de edição", "Criando backup da sequência");
|
taskStart("Aplicando o plano de edição", "Criando backup da sequência");
|
||||||
silenceLog("Criando backup da sequência…");
|
silenceLog("Criando backup da sequência…");
|
||||||
cs.evalScript(
|
cs.evalScript(
|
||||||
@@ -3457,7 +3442,7 @@ function applyEditorialActions() {
|
|||||||
var caminhoDoPlano = path.join(silenceState.outputDir || os.tmpdir(), "plano-editorial-" + Date.now() + ".json");
|
var caminhoDoPlano = path.join(silenceState.outputDir || os.tmpdir(), "plano-editorial-" + Date.now() + ".json");
|
||||||
try { fs.writeFileSync(caminhoDoPlano, JSON.stringify(plan, null, 2), "utf-8"); } catch (erroEscrita) {
|
try { fs.writeFileSync(caminhoDoPlano, JSON.stringify(plan, null, 2), "utf-8"); } catch (erroEscrita) {
|
||||||
setBusy("btnApplyEditorialActions", false);
|
setBusy("btnApplyEditorialActions", false);
|
||||||
setStep(5, "error", "Falhou");
|
setStep(3, "error", "Falhou");
|
||||||
taskEnd(false, "Não foi possível salvar o plano.", erroEscrita.message);
|
taskEnd(false, "Não foi possível salvar o plano.", erroEscrita.message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -3474,12 +3459,12 @@ function applyEditorialActions() {
|
|||||||
processoAplicacao = null;
|
processoAplicacao = null;
|
||||||
setBusy("btnApplyEditorialActions", false);
|
setBusy("btnApplyEditorialActions", false);
|
||||||
if (code !== 0) {
|
if (code !== 0) {
|
||||||
setStep(5, "error", "Falhou");
|
setStep(3, "error", "Falhou");
|
||||||
taskEnd(false, "Falha ao aplicar o plano (código " + code + ").", lastErr);
|
taskEnd(false, "Falha ao aplicar o plano (código " + code + ").", lastErr);
|
||||||
silenceLog("Falha ao aplicar o plano (código " + code + ").", "err");
|
silenceLog("Falha ao aplicar o plano (código " + code + ").", "err");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setStep(5, "done", "Aplicado");
|
setStep(3, "done", "Aplicado");
|
||||||
taskEnd(true, numActions + " ação(ões) aplicadas na timeline!");
|
taskEnd(true, numActions + " ação(ões) aplicadas na timeline!");
|
||||||
silenceLog("Plano de edição aplicado com sucesso!", "ok");
|
silenceLog("Plano de edição aplicado com sucesso!", "ok");
|
||||||
}
|
}
|
||||||
@@ -4134,8 +4119,8 @@ function downloadModel(model, btn, approxMB) {
|
|||||||
setStep(1, "locked", "Scanner");
|
setStep(1, "locked", "Scanner");
|
||||||
setStep(2, "locked", "Scanner");
|
setStep(2, "locked", "Scanner");
|
||||||
setStep(3, "locked", "Aguardando análise");
|
setStep(3, "locked", "Aguardando análise");
|
||||||
setStep(4, "locked", "Aguardando análise");
|
setStep(2, "locked", "Aguardando análise");
|
||||||
setStep(5, "locked", "Aguardando plano");
|
setStep(3, "locked", "Aguardando análise");
|
||||||
|
|
||||||
log("MCP for Adobe Premiere Pro CEP connector loaded");
|
log("MCP for Adobe Premiere Pro CEP connector loaded");
|
||||||
setStatus("waiting", "Aguardando — a ponte está iniciando");
|
setStatus("waiting", "Aguardando — a ponte está iniciando");
|
||||||
|
|||||||
Reference in New Issue
Block a user