feat: criado repositório jhonny-editor no Gitea
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: - 4 arquivos alterados - 0 novos - 4 modificados - 0 removidos 4 files changed, 101 insertions(+), 4 deletions(-) Arquivos: - code/engine/editor/aplicador_de_plano_de_edicao.py - code/engine/editor/escrita/escrita_no_editor.py - code/engine/testes/duplos_de_premiere.py - code/engine/testes/test_aplicador_de_plano_de_edicao.py
This commit is contained in:
@@ -215,8 +215,19 @@ class AplicadorDePlanoDeEdicao:
|
||||
)
|
||||
|
||||
pontos_de_corte = self._calcular_pontos_de_corte(faixas_afetadas, acao, arquivo_de_origem)
|
||||
razor_bem_sucedido = True
|
||||
for ponto in pontos_de_corte:
|
||||
self.escrita.dividir_todas_as_faixas(ponto)
|
||||
try:
|
||||
self.escrita.dividir_todas_as_faixas(ponto)
|
||||
except ErroDeEdicao:
|
||||
razor_bem_sucedido = False
|
||||
break
|
||||
|
||||
if not razor_bem_sucedido:
|
||||
raise ErroDeMapeamentoDeTempo(
|
||||
f"O razor falhou ao cortar as faixas em {acao.inicio:.3f}-{acao.fim:.3f}s "
|
||||
f"(Premiere 26.x QE no-op); nada foi removido."
|
||||
)
|
||||
|
||||
faixas = self._timeline_atual().faixas
|
||||
for faixa_id in {f.identificador for f in faixas_afetadas}:
|
||||
|
||||
@@ -85,9 +85,16 @@ class EscritaNoEditor:
|
||||
Usa ``razor_all_tracks`` para garantir que vídeo e áudio sejam
|
||||
divididos no mesmo ponto de tempo, evitando drift entre chamadas
|
||||
separadas de ``split_clip``.
|
||||
|
||||
Levanta :class:`ErroDeEscritaNoEditor` se o razor reportar uma
|
||||
falha parcial (algumas faixas cortadas, outras não) — o Premiere
|
||||
26.x tem um bug QE que faz o razor falhar silenciosamente em
|
||||
algumas instalações. Uma falha parcial deixa a timeline num estado
|
||||
inconsistente que corrompe operações subsequentes (remoção, zoom,
|
||||
marcador), então a operação é recusada inteiramente.
|
||||
"""
|
||||
try:
|
||||
self.cliente_mcp.chamar(
|
||||
resultado = self.cliente_mcp.chamar(
|
||||
"razor_all_tracks",
|
||||
{"time_seconds": instante_da_timeline, "track_type": "both"},
|
||||
)
|
||||
@@ -95,6 +102,13 @@ class EscritaNoEditor:
|
||||
raise ErroDeEscritaNoEditor(
|
||||
f"Não foi possível cortar todas as faixas em {instante_da_timeline:.3f}s: {erro}"
|
||||
) from erro
|
||||
elegiveis = int(resultado.get("eligibleTracks", 0))
|
||||
cortados = int(resultado.get("razored", 0))
|
||||
if elegiveis > 0 and cortados < elegiveis:
|
||||
raise ErroDeEscritaNoEditor(
|
||||
f"O razor cortou apenas {cortados} de {elegiveis} faixa(s) elegíveis "
|
||||
f"em {instante_da_timeline:.3f}s (Premiere 26.x QE no-op)"
|
||||
)
|
||||
|
||||
def remover_trecho(self, identificador_do_clipe: str) -> None:
|
||||
"""Remove o clipe da timeline fechando o espaço que ele ocupava.
|
||||
|
||||
Reference in New Issue
Block a user