Bug: Transcript.createImportTextSegmentsAction + executeTransaction melden Erfolg, committen aber nichts
Bug: Transcript.createImportTextSegmentsAction + executeTransaction melden Erfolg, committen aber nichts
Umgebung
- Premiere Pro Version: 26.3.0 (Manifest minVersion), UXP Manifest v5
- API:
@adobe/premiereproUXP-Bindings (ppro-Namespace)
Erwartetes Verhalten
ppro.Transcript.createImportTextSegmentsAction(textSegments, clipProjectItem) erzeugt eine Action, die per project.executeTransaction() committet wird und das Transkript am ClipProjectItem anhängt - äquivalent zu Text-Panel → Overflow-Menü → Import → Import Static Transcript.
Tatsächliches Verhalten
Jede einzelne Stufe der Kette meldet Erfolg, aber ppro.Transcript.hasTranscript(clipProjectItem) und die UI (Text-Panel) zeigen übereinstimmend, dass kein Transkript angekommen ist.
Minimal-Reproduktion
const project = await ppro.Project.getActiveProject();
const sequence = await project.getActiveSequence();
const track = await sequence.getAudioTrack(0);
const trackItems = await track.getTrackItems(ppro.Constants.TrackItemType.CLIP, false);
const projectItem = await trackItems[0].getProjectItem();
const clipProjectItem = ppro.ClipProjectItem.cast(projectItem);
const testJson = JSON.stringify({
language: "de-de",
segments: [{
start: 0, duration: 1, language: "de-de",
speaker: "631fbbc0-9c02-47c4-bb8c-732c020fa24f",
words: [{ confidence: 1, duration: 1, eos: true, start: 0, tags: [], text: "Test", type: "word" }]
}],
speakers: [{ id: "631fbbc0-9c02-47c4-bb8c-732c020fa24f", name: "Test" }]
});
const textSegments = await ppro.Transcript.importFromJSON(testJson);
await project.lockedAccess(() => {
const action = ppro.Transcript.createImportTextSegmentsAction(textSegments, clipProjectItem);
const success = project.executeTransaction((compoundAction) => {
compoundAction.addAction(action);
}, "Transkript importieren");
console.log("executeTransaction:", success); // -> true
});
const check = await ppro.Transcript.hasTranscript(clipProjectItem);
console.log("hasTranscript:", check); // -> false (erwartet: true)
Was bereits einzeln verifiziert wurde (jeweils mit Erfolgsmeldung, ohne Wirkung)
| Schritt | Ergebnis |
|---|---|
ppro.Transcript.importFromJSON(json) | Liefert TextSegments {}-Objekt, kein Fehler |
ppro.Transcript.createImportTextSegmentsAction(textSegments, clipProjectItem) | Liefert Action {}-Objekt mit korrektem Konstruktor, kein Fehler |
compoundAction.addAction(action) (innerhalb executeTransaction) | Rückgabewert true |
project.executeTransaction(callback, undoString) | Rückgabewert true |
ppro.Transcript.hasTranscript(clipProjectItem) danach | false |
Dieselbe Prüfung mit frisch neu geholtem ClipProjectItem (falls stale Referenz) | Ebenfalls false |
Clip vorher explizit via ppro.SourceMonitor.openProjectItem() geöffnet | Kein Unterschied |
| Getestet mit synthetischem 1-Wort-JSON UND mit echtem Inhalt (154 Wörter, 2 Sprecher, mehrere Segmente) | Kein Unterschied |
Getestet gegen ClipProjectItem eines regulären Medien-Clips UND gegen das (via sequence.getProjectItem() + ClipProjectItem.cast()) gecastete ProjectItem einer Sequenz selbst (isSequence() bestätigt true) | Kein Unterschied |
| Manueller Import derselben JSON-Datei über Text-Panel → Import Static Transcript | Funktioniert einwandfrei |
Schlussfolgerung
Das JSON-Format ist korrekt (manueller Import bestätigt dies zweifelsfrei). Der Fehler liegt ausschließlich in der programmatischen Kette createImportTextSegmentsAction / executeTransaction für Transcript-Actions - vermutlich commitet die Transaktion intern nicht korrekt für diesen spezifischen Action-Typ, obwohl der Rückgabewert Erfolg suggeriert.
