PROD
IO
Node-Detail
wirkt minified
Job Execute ExtendScript In Premiere Action V2
helmut4_backup_l-helmut1.adin.mdr.de_2026-10-19 07_52_22 · AudioClip-Liste erzeugen
Node-Informationen
- Stream
- AudioClip-Liste erzeugen
- Klasse
- nodes.actions.helmut.job.JobPremiereExecuteExtendScriptActionV2
- UUID
- 56eacfc1-766a-42c5-8c99-e801c6497436
- Operator-ID
- 7
- Event
- EXPORT
Properties
{
"extendScript": "var group_clips = '{stream.variable.group_clips}'; var file_csv = '{stream.variable.file_csv}'; var file_json = '{stream.variable.file_json}'; var audioformate = '{stream.variable.audio_formate}'; var AudioExportConfig = { extensions: { wav: true, aiff: true, mp3: true, m4a: true, aac: true }, groupByName: true, csv: false, json: false }; function parseAudioExtensions(str) { var validExt = [\"wav\", \"aif\", \"aiff\", \"mp3\", \"m4a\", \"aac\"]; if (!str || typeof str !== \"string\") { var empty = {}; for (var i = 0; i < validExt.length; i++) { empty[validExt[i]] = false; } return empty; } var cleaned = str.toLowerCase(); cleaned = cleaned.replace(/[\\s]+/g, \"\"); cleaned = cleaned.replace(/;/g, \",\"); cleaned = cleaned.replace(/,+/g, \",\"); cleaned = cleaned.replace(/^,|,$/g, \"\"); if (cleaned === \"\") { var empty2 = {}; for (var j = 0; j < validExt.length; j++) { empty2[validExt[j]] = false; } return empty2; } var parts = cleaned.split(\",\"); var out = {}; var x; for (x = 0; x < validExt.length; x++) { out[validExt[x]] = false; } for (var k = 0; k < parts.length; k++) { var ext = parts[k]; if (!ext) { continue; } var isValid = false; for (var v = 0; v < validExt.length; v++) { if (validExt[v] === ext) { isValid = true; break; } } if (isValid) { out[ext] = true; } } return out; } function exportAudioClipsFromActiveSequence(cfg) { if (!app.project || !app.project.activeSequence) { alert(\"Keine aktive Sequenz gefunden.\"); return; } var seq = app.project.activeSequence; var audioTracks = seq.audioTracks; if (!audioTracks || audioTracks.numTracks === 0) { alert(\"Die aktive Sequenz hat keine Audio-Tracks.\"); return; } var effectiveConfig = { extensions: { wav: (cfg && cfg.extensions && typeof cfg.extensions.wav === \"boolean\") ? cfg.extensions.wav : AudioExportConfig.extensions.wav, aif: (cfg && cfg.extensions && typeof cfg.extensions.aif === \"boolean\") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff, aiff: (cfg && cfg.extensions && typeof cfg.extensions.aiff === \"boolean\") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff, mp3: (cfg && cfg.extensions && typeof cfg.extensions.mp3 === \"boolean\") ? cfg.extensions.mp3 : AudioExportConfig.extensions.mp3, m4a: (cfg && cfg.extensions && typeof cfg.extensions.m4a === \"boolean\") ? cfg.extensions.m4a : AudioExportConfig.extensions.m4a, aac: (cfg && cfg.extensions && typeof cfg.extensions.aac === \"boolean\") ? cfg.extensions.aac : AudioExportConfig.extensions.aac }, groupByName: (cfg && typeof cfg.groupByName === \"boolean\") ? cfg.groupByName : AudioExportConfig.groupByName, csv: (cfg && typeof cfg.csv === \"boolean\") ? cfg.csv : AudioExportConfig.csv, json: (cfg && typeof cfg.json === \"boolean\") ? cfg.json : AudioExportConfig.json }; var TICKS_PER_SECOND = 254016000000.0; var zeroSec = 0; try { if (seq.zeroPoint !== undefined && seq.zeroPoint !== null) { var zeroTicks = parseFloat(seq.zeroPoint); if (!isNaN(zeroTicks)) { zeroSec = zeroTicks / TICKS_PER_SECOND; } } } catch (eZ) { zeroSec = 0; } var safeSeqName = sanitizeName(seq.name); var txtPath = Folder.desktop.fsName + \"/AudioClipListe_\" + safeSeqName + \".txt\"; var txtFile = new File(txtPath); txtFile.encoding = \"UTF-8\"; if (!txtFile.open(\"w\", \"TEXT\", \"????\")) { alert(\"Konnte die Textdatei nicht \\u00f6ffnen.\"); return; } var csvFile = null; if (effectiveConfig.csv) { var csvPath = Folder.desktop.fsName + \"/AudioClipListe_\" + safeSeqName + \".csv\"; csvFile = new File(csvPath); csvFile.encoding = \"UTF-8\"; if (!csvFile.open(\"w\", \"TEXT\", \"????\")) { alert(\"Konnte die CSV-Datei nicht \\u00f6ffnen. Es wird nur TXT geschrieben.\"); csvFile = null; } } var jsonFile = null; if (effectiveConfig.json) { var jsonPath = Folder.desktop.fsName + \"/AudioClipListe_\" + safeSeqName + \".json\"; jsonFile = new File(jsonPath); jsonFile.encoding = \"UTF-8\"; if (!jsonFile.open(\"w\", \"TEXT\", \"????\")) { alert(\"Konnte die JSON-Datei nicht \\u00f6ffnen. Es wird nur TXT/CSV geschrieben.\"); jsonFile = null; } } txtFile.writeln(\"Audio-Clip-Liste f\\u00fcr Sequenz: \" + seq.name); txtFile.writeln(\"-----------------------------------------------------\"); txtFile.writeln( \"Filter: \" + \"mp3=\" + effectiveConfig.extensions.mp3 + \", \" + \"m4a=\" + effectiveConfig.extensions.m4a + \", \" + \"wav=\" + effectiveConfig.extensions.wav + \", \" + \"aiff=\" + effectiveConfig.extensions.aiff + \", \" + \"aac=\" + effectiveConfig.extensions.aac ); txtFile.writeln(\"Gruppieren nach Name: \" + effectiveConfig.groupByName); txtFile.writeln(\"\"); function formatSeconds(sec) { if (sec < 0) sec = 0; var sInt = Math.floor(sec); var h = Math.floor(sInt / 3600); var m = Math.floor((sInt [<]%[>] 3600) / 60); var s = sInt [<]%[>] 60; function pad2(n) { return (n < 10 ? \"0\" : \"\") + n; } return pad2(h) + \":\" + pad2(m) + \":\" + pad2(s); } function sanitizeName(name) { if (!name) return \"Sequence\"; var s = name.toString(); s = s.replace(/[^a-zA-Z0-9_\\-]/g, \"_\"); s = s.replace(/_+/g, \"_\"); s = s.replace(/^_+|_+$/g, \"\"); if (s.length === 0) s = \"Sequence\"; return s; } function escapeJsonString(str) { if (str === null || str === undefined) { return \"\"; } var s = String(str); s = s.replace(/\\\\/g, \"\\\\\\\\\"); s = s.replace(/\"/g, \"\\\\\\\"\"); s = s.replace(/\\r/g, \"\\\\r\"); s = s.replace(/\\n/g, \"\\\\n\"); s = s.replace(/\\t/g, \"\\\\t\"); return s; } function hasSupportedAudioExtension(name, cfgExt) { if (!name) return false; var lower = name.toLowerCase(); var dotPos = lower.lastIndexOf(\".\"); if (dotPos < 0) return false; var ext = lower.substring(dotPos + 1); if (ext === \"mp3\" && cfgExt.mp3) return true; if (ext === \"m4a\" && cfgExt.m4a) return true; if (ext === \"wav\" && cfgExt.wav) return true; if (ext === \"aiff\" && cfgExt.aiff) return true; if (ext === \"aif\" && cfgExt.aiff) return true; return false; } function isLinkedToVideo(trackItem) { if (!trackItem || !trackItem.getLinkedItems) { return false; } var linked; try { linked = trackItem.getLinkedItems(); } catch (e) { $.writeln(\"Fehler bei getLinkedItems: \" + e); return false; } if (!linked) { return false; } try { var len = (linked.length !== undefined) ? linked.length : linked.numItems; for (var i = 0; i < len; i++) { var li = linked[i]; if (!li) continue; var parentTrack = li.parentTrack; if (parentTrack && parentTrack.isVideo === true) { return true; } return true; } } catch (e2) { $.writeln(\"Fehler bei Auswertung der Linked Items: \" + e2); } return false; } var clipInstanceCount = 0; var durationsByName = {}; var singleClipEntries = []; for (var t = 0; t < audioTracks.numTracks; t++) { var track = audioTracks[t]; if (!track || !track.clips) continue; var clips = track.clips; var numClips = clips.numItems; for (var c = 0; c < numClips; c++) { var item = clips[c]; if (!item) continue; if (isLinkedToVideo(item)) { continue; } var projItem = item.projectItem; if (!projItem) continue; var name = projItem.name; if (!hasSupportedAudioExtension(name, effectiveConfig.extensions)) { continue; } var inTimelineSec = 0; var outTimelineSec = 0; try { if (item.start && item.start.seconds !== undefined) { inTimelineSec = item.start.seconds; } if (item.end && item.end.seconds !== undefined) { outTimelineSec = item.end.seconds; } } catch (e3) { } var durationSeconds = 0; var rawDur = outTimelineSec - inTimelineSec; if (rawDur > 0) { durationSeconds = Math.ceil(rawDur); } else if (item.duration && item.duration.seconds !== undefined) { durationSeconds = Math.ceil(item.duration.seconds); } else { durationSeconds = 0; } if (durationSeconds < 0) { durationSeconds = 0; } clipInstanceCount++; if (durationsByName[name] === undefined) { durationsByName[name] = 0; } durationsByName[name] += durationSeconds; var displayInSec = Math.floor(zeroSec + inTimelineSec); var displayOutSec = displayInSec + durationSeconds; singleClipEntries.push({ name: name, inSec: displayInSec, outSec: displayOutSec, durSec: durationSeconds }); } } if (jsonFile) { jsonFile.writeln(\"{\"); jsonFile.writeln(' \"sequenceName\": \"' + escapeJsonString(seq.name) + '\",'); jsonFile.writeln(' \"sequenceStartSeconds\": ' + zeroSec + \",\"); jsonFile.writeln(' \"groupByName\": ' + (effectiveConfig.groupByName ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"extensions\": {'); jsonFile.writeln(' \"wav\": ' + (effectiveConfig.extensions.wav ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"aif\": ' + (effectiveConfig.extensions.aif ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"aiff\": ' + (effectiveConfig.extensions.aiff ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"mp3\": ' + (effectiveConfig.extensions.mp3 ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"m4a\": ' + (effectiveConfig.extensions.m4a ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"aac\": ' + (effectiveConfig.extensions.aac ? \"true\" : \"false\")); jsonFile.writeln(\" },\"); jsonFile.writeln(' \"clips\": ['); } var keys = []; for (var k in durationsByName) { if (durationsByName.hasOwnProperty(k)) { keys.push(k); } } keys.sort(); var uniqueCount = keys.length; singleClipEntries.sort(function (a, b) { return a.inSec - b.inSec; }); txtFile.writeln(\"Zusammengefasste Liste\"); txtFile.writeln(\"----------------------------------------------\"); txtFile.writeln(\"Name | Gesamt-Dauer\"); txtFile.writeln(\"----------------------------------------------\"); for (var i = 0; i < keys.length; i++) { var clipName = keys[i]; var totalSec = durationsByName[clipName]; var totalStr = formatSeconds(totalSec); txtFile.writeln(clipName + \" | \" + totalStr); } txtFile.writeln(\"\"); txtFile.writeln(\"----------------------------------------------\"); txtFile.writeln(\"Anzahl Clip-Instanzen (alle Eins\\u00e4tze): \" + clipInstanceCount); txtFile.writeln(\"Anzahl eindeutiger Audio-Dateinamen: \" + uniqueCount); txtFile.writeln(\"\"); txtFile.writeln(\"\"); txtFile.writeln(\"Einzelausgabe\"); txtFile.writeln(\"----------------------------------------------------------\"); txtFile.writeln(\"TC-In | TC-Out | Dauer | Name\"); txtFile.writeln(\"----------------------------------------------------------\"); for (var j = 0; j < singleClipEntries.length; j++) { var e = singleClipEntries[j]; var inStr = formatSeconds(e.inSec); var outStr = formatSeconds(e.outSec); var durStr = formatSeconds(e.durSec); txtFile.writeln(inStr + \" | \" + outStr + \" | \" + durStr + \" | \" + e.name); } txtFile.writeln(\"\"); txtFile.writeln(\"----------------------------------------------------------\"); txtFile.writeln(\"Anzahl Clip-Instanzen (alle Eins\\u00e4tze): \" + clipInstanceCount); if (effectiveConfig.groupByName) { if (csvFile) { csvFile.writeln(\"Name;GesamtDauerHHMMSS;GesamtDauerSekunden\"); } for (var g = 0; g < keys.length; g++) { var groupedClipName = keys[g]; var groupedTotalSec = durationsByName[groupedClipName]; var groupedTotalStr = formatSeconds(groupedTotalSec); if (csvFile) { csvFile.writeln(groupedClipName + \";\" + groupedTotalStr + \";\" + groupedTotalSec); } if (jsonFile) { var line = ' { \"name\": \"' + escapeJsonString(groupedClipName) + '\", \"totalSeconds\": ' + groupedTotalSec + ', \"totalTimecode\": \"' + groupedTotalStr + '\" }'; if (g < uniqueCount - 1) { line += \",\"; } jsonFile.writeln(line); } } } else { if (csvFile) { csvFile.writeln(\"TCIn;TCOut;Dauer;Name\"); } for (var s = 0; s < singleClipEntries.length; s++) { var singleEntry = singleClipEntries[s]; var singleInStr = formatSeconds(singleEntry.inSec); var singleOutStr = formatSeconds(singleEntry.outSec); var singleDurStr = formatSeconds(singleEntry.durSec); if (csvFile) { csvFile.writeln(singleInStr + \";\" + singleOutStr + \";\" + singleDurStr + \";\" + singleEntry.name); } if (jsonFile) { var jLine = ' { \"name\": \"' + escapeJsonString(singleEntry.name) + '\", \"tcIn\": \"' + singleInStr + '\", \"tcOut\": \"' + singleOutStr + '\", \"duration\": \"' + singleDurStr + '\", \"durationSeconds\": ' + singleEntry.durSec + ', \"tcInSeconds\": ' + singleEntry.inSec + ', \"tcOutSeconds\": ' + singleEntry.outSec + ' }'; if (s < singleClipEntries.length - 1) { jLine += \",\"; } jsonFile.writeln(jLine); } } } if (jsonFile) { jsonFile.writeln(\" ]\"); jsonFile.writeln(\"}\"); } txtFile.close(); if (csvFile) { csvFile.close(); } if (jsonFile) { jsonFile.close(); } var msg = \"Export abgeschlossen.\\n\" + \"Clip-Instanzen (alle Eins\\u00e4tze): \" + clipInstanceCount + \"\\n\" + \"Gruppiert nach Name: \" + effectiveConfig.groupByName + \"\\n\" + \"TXT: \" + txtFile.fsName; if (csvFile) { msg += \"\\nCSV: \" + csvFile.fsName; } if (jsonFile) { msg += \"\\nJSON: \" + jsonFile.fsName; } alert(msg); } var uiFilter = { extensions: parseAudioExtensions(audioformate), groupByName: group_clips === 'true', csv: file_csv === 'true', json: file_json === 'true' }; exportAudioClipsFromActiveSequence(uiFilter);",
"nodeUUID": "56eacfc1-766a-42c5-8c99-e801c6497436",
"successNodeUUID": "fcfc9587-d02a-4ee2-ac45-d40ed8e8fc67"
}Skript
Original: 1 Zeilen · 12455 Zeichen
Formatiert: 393 Zeilen
Dieses Skript wirkt minified.
Die formatierte Ansicht wird nur zur besseren Lesbarkeit erzeugt. Das gespeicherte Original bleibt unverändert.
Formatierung ergänzt Einrückungen und Zeilenumbrüche. Ursprüngliche Variablennamen und Kommentare lassen sich aus minifiziertem Code nicht wiederherstellen. ExtendScript-Direktiven und E4X werden bei der Formatierung berücksichtigt.
Original
var group_clips = '{stream.variable.group_clips}'; var file_csv = '{stream.variable.file_csv}'; var file_json = '{stream.variable.file_json}'; var audioformate = '{stream.variable.audio_formate}'; var AudioExportConfig = { extensions: { wav: true, aiff: true, mp3: true, m4a: true, aac: true }, groupByName: true, csv: false, json: false }; function parseAudioExtensions(str) { var validExt = ["wav", "aif", "aiff", "mp3", "m4a", "aac"]; if (!str || typeof str !== "string") { var empty = {}; for (var i = 0; i < validExt.length; i++) { empty[validExt[i]] = false; } return empty; } var cleaned = str.toLowerCase(); cleaned = cleaned.replace(/[\s]+/g, ""); cleaned = cleaned.replace(/;/g, ","); cleaned = cleaned.replace(/,+/g, ","); cleaned = cleaned.replace(/^,|,$/g, ""); if (cleaned === "") { var empty2 = {}; for (var j = 0; j < validExt.length; j++) { empty2[validExt[j]] = false; } return empty2; } var parts = cleaned.split(","); var out = {}; var x; for (x = 0; x < validExt.length; x++) { out[validExt[x]] = false; } for (var k = 0; k < parts.length; k++) { var ext = parts[k]; if (!ext) { continue; } var isValid = false; for (var v = 0; v < validExt.length; v++) { if (validExt[v] === ext) { isValid = true; break; } } if (isValid) { out[ext] = true; } } return out; } function exportAudioClipsFromActiveSequence(cfg) { if (!app.project || !app.project.activeSequence) { alert("Keine aktive Sequenz gefunden."); return; } var seq = app.project.activeSequence; var audioTracks = seq.audioTracks; if (!audioTracks || audioTracks.numTracks === 0) { alert("Die aktive Sequenz hat keine Audio-Tracks."); return; } var effectiveConfig = { extensions: { wav: (cfg && cfg.extensions && typeof cfg.extensions.wav === "boolean") ? cfg.extensions.wav : AudioExportConfig.extensions.wav, aif: (cfg && cfg.extensions && typeof cfg.extensions.aif === "boolean") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff, aiff: (cfg && cfg.extensions && typeof cfg.extensions.aiff === "boolean") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff, mp3: (cfg && cfg.extensions && typeof cfg.extensions.mp3 === "boolean") ? cfg.extensions.mp3 : AudioExportConfig.extensions.mp3, m4a: (cfg && cfg.extensions && typeof cfg.extensions.m4a === "boolean") ? cfg.extensions.m4a : AudioExportConfig.extensions.m4a, aac: (cfg && cfg.extensions && typeof cfg.extensions.aac === "boolean") ? cfg.extensions.aac : AudioExportConfig.extensions.aac }, groupByName: (cfg && typeof cfg.groupByName === "boolean") ? cfg.groupByName : AudioExportConfig.groupByName, csv: (cfg && typeof cfg.csv === "boolean") ? cfg.csv : AudioExportConfig.csv, json: (cfg && typeof cfg.json === "boolean") ? cfg.json : AudioExportConfig.json }; var TICKS_PER_SECOND = 254016000000.0; var zeroSec = 0; try { if (seq.zeroPoint !== undefined && seq.zeroPoint !== null) { var zeroTicks = parseFloat(seq.zeroPoint); if (!isNaN(zeroTicks)) { zeroSec = zeroTicks / TICKS_PER_SECOND; } } } catch (eZ) { zeroSec = 0; } var safeSeqName = sanitizeName(seq.name); var txtPath = Folder.desktop.fsName + "/AudioClipListe_" + safeSeqName + ".txt"; var txtFile = new File(txtPath); txtFile.encoding = "UTF-8"; if (!txtFile.open("w", "TEXT", "????")) { alert("Konnte die Textdatei nicht \u00f6ffnen."); return; } var csvFile = null; if (effectiveConfig.csv) { var csvPath = Folder.desktop.fsName + "/AudioClipListe_" + safeSeqName + ".csv"; csvFile = new File(csvPath); csvFile.encoding = "UTF-8"; if (!csvFile.open("w", "TEXT", "????")) { alert("Konnte die CSV-Datei nicht \u00f6ffnen. Es wird nur TXT geschrieben."); csvFile = null; } } var jsonFile = null; if (effectiveConfig.json) { var jsonPath = Folder.desktop.fsName + "/AudioClipListe_" + safeSeqName + ".json"; jsonFile = new File(jsonPath); jsonFile.encoding = "UTF-8"; if (!jsonFile.open("w", "TEXT", "????")) { alert("Konnte die JSON-Datei nicht \u00f6ffnen. Es wird nur TXT/CSV geschrieben."); jsonFile = null; } } txtFile.writeln("Audio-Clip-Liste f\u00fcr Sequenz: " + seq.name); txtFile.writeln("-----------------------------------------------------"); txtFile.writeln( "Filter: " + "mp3=" + effectiveConfig.extensions.mp3 + ", " + "m4a=" + effectiveConfig.extensions.m4a + ", " + "wav=" + effectiveConfig.extensions.wav + ", " + "aiff=" + effectiveConfig.extensions.aiff + ", " + "aac=" + effectiveConfig.extensions.aac ); txtFile.writeln("Gruppieren nach Name: " + effectiveConfig.groupByName); txtFile.writeln(""); function formatSeconds(sec) { if (sec < 0) sec = 0; var sInt = Math.floor(sec); var h = Math.floor(sInt / 3600); var m = Math.floor((sInt [<]%[>] 3600) / 60); var s = sInt [<]%[>] 60; function pad2(n) { return (n < 10 ? "0" : "") + n; } return pad2(h) + ":" + pad2(m) + ":" + pad2(s); } function sanitizeName(name) { if (!name) return "Sequence"; var s = name.toString(); s = s.replace(/[^a-zA-Z0-9_\-]/g, "_"); s = s.replace(/_+/g, "_"); s = s.replace(/^_+|_+$/g, ""); if (s.length === 0) s = "Sequence"; return s; } function escapeJsonString(str) { if (str === null || str === undefined) { return ""; } var s = String(str); s = s.replace(/\\/g, "\\\\"); s = s.replace(/"/g, "\\\""); s = s.replace(/\r/g, "\\r"); s = s.replace(/\n/g, "\\n"); s = s.replace(/\t/g, "\\t"); return s; } function hasSupportedAudioExtension(name, cfgExt) { if (!name) return false; var lower = name.toLowerCase(); var dotPos = lower.lastIndexOf("."); if (dotPos < 0) return false; var ext = lower.substring(dotPos + 1); if (ext === "mp3" && cfgExt.mp3) return true; if (ext === "m4a" && cfgExt.m4a) return true; if (ext === "wav" && cfgExt.wav) return true; if (ext === "aiff" && cfgExt.aiff) return true; if (ext === "aif" && cfgExt.aiff) return true; return false; } function isLinkedToVideo(trackItem) { if (!trackItem || !trackItem.getLinkedItems) { return false; } var linked; try { linked = trackItem.getLinkedItems(); } catch (e) { $.writeln("Fehler bei getLinkedItems: " + e); return false; } if (!linked) { return false; } try { var len = (linked.length !== undefined) ? linked.length : linked.numItems; for (var i = 0; i < len; i++) { var li = linked[i]; if (!li) continue; var parentTrack = li.parentTrack; if (parentTrack && parentTrack.isVideo === true) { return true; } return true; } } catch (e2) { $.writeln("Fehler bei Auswertung der Linked Items: " + e2); } return false; } var clipInstanceCount = 0; var durationsByName = {}; var singleClipEntries = []; for (var t = 0; t < audioTracks.numTracks; t++) { var track = audioTracks[t]; if (!track || !track.clips) continue; var clips = track.clips; var numClips = clips.numItems; for (var c = 0; c < numClips; c++) { var item = clips[c]; if (!item) continue; if (isLinkedToVideo(item)) { continue; } var projItem = item.projectItem; if (!projItem) continue; var name = projItem.name; if (!hasSupportedAudioExtension(name, effectiveConfig.extensions)) { continue; } var inTimelineSec = 0; var outTimelineSec = 0; try { if (item.start && item.start.seconds !== undefined) { inTimelineSec = item.start.seconds; } if (item.end && item.end.seconds !== undefined) { outTimelineSec = item.end.seconds; } } catch (e3) { } var durationSeconds = 0; var rawDur = outTimelineSec - inTimelineSec; if (rawDur > 0) { durationSeconds = Math.ceil(rawDur); } else if (item.duration && item.duration.seconds !== undefined) { durationSeconds = Math.ceil(item.duration.seconds); } else { durationSeconds = 0; } if (durationSeconds < 0) { durationSeconds = 0; } clipInstanceCount++; if (durationsByName[name] === undefined) { durationsByName[name] = 0; } durationsByName[name] += durationSeconds; var displayInSec = Math.floor(zeroSec + inTimelineSec); var displayOutSec = displayInSec + durationSeconds; singleClipEntries.push({ name: name, inSec: displayInSec, outSec: displayOutSec, durSec: durationSeconds }); } } if (jsonFile) { jsonFile.writeln("{"); jsonFile.writeln(' "sequenceName": "' + escapeJsonString(seq.name) + '",'); jsonFile.writeln(' "sequenceStartSeconds": ' + zeroSec + ","); jsonFile.writeln(' "groupByName": ' + (effectiveConfig.groupByName ? "true" : "false") + ","); jsonFile.writeln(' "extensions": {'); jsonFile.writeln(' "wav": ' + (effectiveConfig.extensions.wav ? "true" : "false") + ","); jsonFile.writeln(' "aif": ' + (effectiveConfig.extensions.aif ? "true" : "false") + ","); jsonFile.writeln(' "aiff": ' + (effectiveConfig.extensions.aiff ? "true" : "false") + ","); jsonFile.writeln(' "mp3": ' + (effectiveConfig.extensions.mp3 ? "true" : "false") + ","); jsonFile.writeln(' "m4a": ' + (effectiveConfig.extensions.m4a ? "true" : "false") + ","); jsonFile.writeln(' "aac": ' + (effectiveConfig.extensions.aac ? "true" : "false")); jsonFile.writeln(" },"); jsonFile.writeln(' "clips": ['); } var keys = []; for (var k in durationsByName) { if (durationsByName.hasOwnProperty(k)) { keys.push(k); } } keys.sort(); var uniqueCount = keys.length; singleClipEntries.sort(function (a, b) { return a.inSec - b.inSec; }); txtFile.writeln("Zusammengefasste Liste"); txtFile.writeln("----------------------------------------------"); txtFile.writeln("Name | Gesamt-Dauer"); txtFile.writeln("----------------------------------------------"); for (var i = 0; i < keys.length; i++) { var clipName = keys[i]; var totalSec = durationsByName[clipName]; var totalStr = formatSeconds(totalSec); txtFile.writeln(clipName + " | " + totalStr); } txtFile.writeln(""); txtFile.writeln("----------------------------------------------"); txtFile.writeln("Anzahl Clip-Instanzen (alle Eins\u00e4tze): " + clipInstanceCount); txtFile.writeln("Anzahl eindeutiger Audio-Dateinamen: " + uniqueCount); txtFile.writeln(""); txtFile.writeln(""); txtFile.writeln("Einzelausgabe"); txtFile.writeln("----------------------------------------------------------"); txtFile.writeln("TC-In | TC-Out | Dauer | Name"); txtFile.writeln("----------------------------------------------------------"); for (var j = 0; j < singleClipEntries.length; j++) { var e = singleClipEntries[j]; var inStr = formatSeconds(e.inSec); var outStr = formatSeconds(e.outSec); var durStr = formatSeconds(e.durSec); txtFile.writeln(inStr + " | " + outStr + " | " + durStr + " | " + e.name); } txtFile.writeln(""); txtFile.writeln("----------------------------------------------------------"); txtFile.writeln("Anzahl Clip-Instanzen (alle Eins\u00e4tze): " + clipInstanceCount); if (effectiveConfig.groupByName) { if (csvFile) { csvFile.writeln("Name;GesamtDauerHHMMSS;GesamtDauerSekunden"); } for (var g = 0; g < keys.length; g++) { var groupedClipName = keys[g]; var groupedTotalSec = durationsByName[groupedClipName]; var groupedTotalStr = formatSeconds(groupedTotalSec); if (csvFile) { csvFile.writeln(groupedClipName + ";" + groupedTotalStr + ";" + groupedTotalSec); } if (jsonFile) { var line = ' { "name": "' + escapeJsonString(groupedClipName) + '", "totalSeconds": ' + groupedTotalSec + ', "totalTimecode": "' + groupedTotalStr + '" }'; if (g < uniqueCount - 1) { line += ","; } jsonFile.writeln(line); } } } else { if (csvFile) { csvFile.writeln("TCIn;TCOut;Dauer;Name"); } for (var s = 0; s < singleClipEntries.length; s++) { var singleEntry = singleClipEntries[s]; var singleInStr = formatSeconds(singleEntry.inSec); var singleOutStr = formatSeconds(singleEntry.outSec); var singleDurStr = formatSeconds(singleEntry.durSec); if (csvFile) { csvFile.writeln(singleInStr + ";" + singleOutStr + ";" + singleDurStr + ";" + singleEntry.name); } if (jsonFile) { var jLine = ' { "name": "' + escapeJsonString(singleEntry.name) + '", "tcIn": "' + singleInStr + '", "tcOut": "' + singleOutStr + '", "duration": "' + singleDurStr + '", "durationSeconds": ' + singleEntry.durSec + ', "tcInSeconds": ' + singleEntry.inSec + ', "tcOutSeconds": ' + singleEntry.outSec + ' }'; if (s < singleClipEntries.length - 1) { jLine += ","; } jsonFile.writeln(jLine); } } } if (jsonFile) { jsonFile.writeln(" ]"); jsonFile.writeln("}"); } txtFile.close(); if (csvFile) { csvFile.close(); } if (jsonFile) { jsonFile.close(); } var msg = "Export abgeschlossen.\n" + "Clip-Instanzen (alle Eins\u00e4tze): " + clipInstanceCount + "\n" + "Gruppiert nach Name: " + effectiveConfig.groupByName + "\n" + "TXT: " + txtFile.fsName; if (csvFile) { msg += "\nCSV: " + csvFile.fsName; } if (jsonFile) { msg += "\nJSON: " + jsonFile.fsName; } alert(msg); } var uiFilter = { extensions: parseAudioExtensions(audioformate), groupByName: group_clips === 'true', csv: file_csv === 'true', json: file_json === 'true' }; exportAudioClipsFromActiveSequence(uiFilter);
Formatiert
var group_clips = '{stream.variable.group_clips}';
var file_csv = '{stream.variable.file_csv}';
var file_json = '{stream.variable.file_json}';
var audioformate = '{stream.variable.audio_formate}';
var AudioExportConfig = {
extensions: {
wav: true,
aiff: true,
mp3: true,
m4a: true,
aac: true
},
groupByName: true,
csv: false,
json: false
};
function parseAudioExtensions(str) {
var validExt = ["wav", "aif", "aiff", "mp3", "m4a", "aac"];
if (!str || typeof str !== "string") {
var empty = {};
for (var i = 0; i < validExt.length; i++) {
empty[validExt[i]] = false;
}
return empty;
}
var cleaned = str.toLowerCase();
cleaned = cleaned.replace(/[\s]+/g, "");
cleaned = cleaned.replace(/;/g, ",");
cleaned = cleaned.replace(/,+/g, ",");
cleaned = cleaned.replace(/^,|,$/g, "");
if (cleaned === "") {
var empty2 = {};
for (var j = 0; j < validExt.length; j++) {
empty2[validExt[j]] = false;
}
return empty2;
}
var parts = cleaned.split(",");
var out = {};
var x;
for (x = 0; x < validExt.length; x++) {
out[validExt[x]] = false;
}
for (var k = 0; k < parts.length; k++) {
var ext = parts[k];
if (!ext) {
continue;
}
var isValid = false;
for (var v = 0; v < validExt.length; v++) {
if (validExt[v] === ext) {
isValid = true;
break;
}
}
if (isValid) {
out[ext] = true;
}
}
return out;
}
function exportAudioClipsFromActiveSequence(cfg) {
if (!app.project || !app.project.activeSequence) {
alert("Keine aktive Sequenz gefunden.");
return;
}
var seq = app.project.activeSequence;
var audioTracks = seq.audioTracks;
if (!audioTracks || audioTracks.numTracks === 0) {
alert("Die aktive Sequenz hat keine Audio-Tracks.");
return;
}
var effectiveConfig = {
extensions: {
wav: (cfg && cfg.extensions && typeof cfg.extensions.wav === "boolean") ? cfg.extensions.wav : AudioExportConfig.extensions.wav,
aif: (cfg && cfg.extensions && typeof cfg.extensions.aif === "boolean") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff,
aiff: (cfg && cfg.extensions && typeof cfg.extensions.aiff === "boolean") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff,
mp3: (cfg && cfg.extensions && typeof cfg.extensions.mp3 === "boolean") ? cfg.extensions.mp3 : AudioExportConfig.extensions.mp3,
m4a: (cfg && cfg.extensions && typeof cfg.extensions.m4a === "boolean") ? cfg.extensions.m4a : AudioExportConfig.extensions.m4a,
aac: (cfg && cfg.extensions && typeof cfg.extensions.aac === "boolean") ? cfg.extensions.aac : AudioExportConfig.extensions.aac
},
groupByName: (cfg && typeof cfg.groupByName === "boolean") ? cfg.groupByName : AudioExportConfig.groupByName,
csv: (cfg && typeof cfg.csv === "boolean") ? cfg.csv : AudioExportConfig.csv,
json: (cfg && typeof cfg.json === "boolean") ? cfg.json : AudioExportConfig.json
};
var TICKS_PER_SECOND = 254016000000.0;
var zeroSec = 0;
try {
if (seq.zeroPoint !== undefined && seq.zeroPoint !== null) {
var zeroTicks = parseFloat(seq.zeroPoint);
if (!isNaN(zeroTicks)) {
zeroSec = zeroTicks / TICKS_PER_SECOND;
}
}
} catch (eZ) {
zeroSec = 0;
}
var safeSeqName = sanitizeName(seq.name);
var txtPath = Folder.desktop.fsName + "/AudioClipListe_" + safeSeqName + ".txt";
var txtFile = new File(txtPath);
txtFile.encoding = "UTF-8";
if (!txtFile.open("w", "TEXT", "????")) {
alert("Konnte die Textdatei nicht \u00f6ffnen.");
return;
}
var csvFile = null;
if (effectiveConfig.csv) {
var csvPath = Folder.desktop.fsName + "/AudioClipListe_" + safeSeqName + ".csv";
csvFile = new File(csvPath);
csvFile.encoding = "UTF-8";
if (!csvFile.open("w", "TEXT", "????")) {
alert("Konnte die CSV-Datei nicht \u00f6ffnen. Es wird nur TXT geschrieben.");
csvFile = null;
}
}
var jsonFile = null;
if (effectiveConfig.json) {
var jsonPath = Folder.desktop.fsName + "/AudioClipListe_" + safeSeqName + ".json";
jsonFile = new File(jsonPath);
jsonFile.encoding = "UTF-8";
if (!jsonFile.open("w", "TEXT", "????")) {
alert("Konnte die JSON-Datei nicht \u00f6ffnen. Es wird nur TXT/CSV geschrieben.");
jsonFile = null;
}
}
txtFile.writeln("Audio-Clip-Liste f\u00fcr Sequenz: " + seq.name);
txtFile.writeln("-----------------------------------------------------");
txtFile.writeln("Filter: " + "mp3=" + effectiveConfig.extensions.mp3 + ", " + "m4a=" + effectiveConfig.extensions.m4a + ", " + "wav=" + effectiveConfig.extensions.wav + ", " + "aiff=" + effectiveConfig.extensions.aiff + ", " + "aac=" + effectiveConfig.extensions.aac);
txtFile.writeln("Gruppieren nach Name: " + effectiveConfig.groupByName);
txtFile.writeln("");
function formatSeconds(sec) {
if (sec < 0) sec = 0;
var sInt = Math.floor(sec);
var h = Math.floor(sInt / 3600);
var m = Math.floor((sInt[ < ] % [ > ] 3600) / 60);
var s = sInt[ < ] % [ > ] 60;
function pad2(n) {
return (n < 10 ? "0" : "") + n;
}
return pad2(h) + ":" + pad2(m) + ":" + pad2(s);
}
function sanitizeName(name) {
if (!name) return "Sequence";
var s = name.toString();
s = s.replace(/[^a-zA-Z0-9_\-]/g, "_");
s = s.replace(/_+/g, "_");
s = s.replace(/^_+|_+$/g, "");
if (s.length === 0) s = "Sequence";
return s;
}
function escapeJsonString(str) {
if (str === null || str === undefined) {
return "";
}
var s = String(str);
s = s.replace(/\\/g, "\\\\");
s = s.replace(/"/g, "\\\"");
s = s.replace(/\r/g, "\\r");
s = s.replace(/\n/g, "\\n");
s = s.replace(/\t/g, "\\t");
return s;
}
function hasSupportedAudioExtension(name, cfgExt) {
if (!name) return false;
var lower = name.toLowerCase();
var dotPos = lower.lastIndexOf(".");
if (dotPos < 0) return false;
var ext = lower.substring(dotPos + 1);
if (ext === "mp3" && cfgExt.mp3) return true;
if (ext === "m4a" && cfgExt.m4a) return true;
if (ext === "wav" && cfgExt.wav) return true;
if (ext === "aiff" && cfgExt.aiff) return true;
if (ext === "aif" && cfgExt.aiff) return true;
return false;
}
function isLinkedToVideo(trackItem) {
if (!trackItem || !trackItem.getLinkedItems) {
return false;
}
var linked;
try {
linked = trackItem.getLinkedItems();
} catch (e) {
$.writeln("Fehler bei getLinkedItems: " + e);
return false;
}
if (!linked) {
return false;
}
try {
var len = (linked.length !== undefined) ? linked.length : linked.numItems;
for (var i = 0; i < len; i++) {
var li = linked[i];
if (!li) continue;
var parentTrack = li.parentTrack;
if (parentTrack && parentTrack.isVideo === true) {
return true;
}
return true;
}
} catch (e2) {
$.writeln("Fehler bei Auswertung der Linked Items: " + e2);
}
return false;
}
var clipInstanceCount = 0;
var durationsByName = {};
var singleClipEntries = [];
for (var t = 0; t < audioTracks.numTracks; t++) {
var track = audioTracks[t];
if (!track || !track.clips) continue;
var clips = track.clips;
var numClips = clips.numItems;
for (var c = 0; c < numClips; c++) {
var item = clips[c];
if (!item) continue;
if (isLinkedToVideo(item)) {
continue;
}
var projItem = item.projectItem;
if (!projItem) continue;
var name = projItem.name;
if (!hasSupportedAudioExtension(name, effectiveConfig.extensions)) {
continue;
}
var inTimelineSec = 0;
var outTimelineSec = 0;
try {
if (item.start && item.start.seconds !== undefined) {
inTimelineSec = item.start.seconds;
}
if (item.end && item.end.seconds !== undefined) {
outTimelineSec = item.end.seconds;
}
} catch (e3) {}
var durationSeconds = 0;
var rawDur = outTimelineSec - inTimelineSec;
if (rawDur > 0) {
durationSeconds = Math.ceil(rawDur);
} else if (item.duration && item.duration.seconds !== undefined) {
durationSeconds = Math.ceil(item.duration.seconds);
} else {
durationSeconds = 0;
}
if (durationSeconds < 0) {
durationSeconds = 0;
}
clipInstanceCount++;
if (durationsByName[name] === undefined) {
durationsByName[name] = 0;
}
durationsByName[name] += durationSeconds;
var displayInSec = Math.floor(zeroSec + inTimelineSec);
var displayOutSec = displayInSec + durationSeconds;
singleClipEntries.push({
name: name,
inSec: displayInSec,
outSec: displayOutSec,
durSec: durationSeconds
});
}
}
if (jsonFile) {
jsonFile.writeln("{");
jsonFile.writeln(' "sequenceName": "' + escapeJsonString(seq.name) + '",');
jsonFile.writeln(' "sequenceStartSeconds": ' + zeroSec + ",");
jsonFile.writeln(' "groupByName": ' + (effectiveConfig.groupByName ? "true" : "false") + ",");
jsonFile.writeln(' "extensions": {');
jsonFile.writeln(' "wav": ' + (effectiveConfig.extensions.wav ? "true" : "false") + ",");
jsonFile.writeln(' "aif": ' + (effectiveConfig.extensions.aif ? "true" : "false") + ",");
jsonFile.writeln(' "aiff": ' + (effectiveConfig.extensions.aiff ? "true" : "false") + ",");
jsonFile.writeln(' "mp3": ' + (effectiveConfig.extensions.mp3 ? "true" : "false") + ",");
jsonFile.writeln(' "m4a": ' + (effectiveConfig.extensions.m4a ? "true" : "false") + ",");
jsonFile.writeln(' "aac": ' + (effectiveConfig.extensions.aac ? "true" : "false"));
jsonFile.writeln(" },");
jsonFile.writeln(' "clips": [');
}
var keys = [];
for (var k in durationsByName) {
if (durationsByName.hasOwnProperty(k)) {
keys.push(k);
}
}
keys.sort();
var uniqueCount = keys.length;
singleClipEntries.sort(function(a, b) {
return a.inSec - b.inSec;
});
txtFile.writeln("Zusammengefasste Liste");
txtFile.writeln("----------------------------------------------");
txtFile.writeln("Name | Gesamt-Dauer");
txtFile.writeln("----------------------------------------------");
for (var i = 0; i < keys.length; i++) {
var clipName = keys[i];
var totalSec = durationsByName[clipName];
var totalStr = formatSeconds(totalSec);
txtFile.writeln(clipName + " | " + totalStr);
}
txtFile.writeln("");
txtFile.writeln("----------------------------------------------");
txtFile.writeln("Anzahl Clip-Instanzen (alle Eins\u00e4tze): " + clipInstanceCount);
txtFile.writeln("Anzahl eindeutiger Audio-Dateinamen: " + uniqueCount);
txtFile.writeln("");
txtFile.writeln("");
txtFile.writeln("Einzelausgabe");
txtFile.writeln("----------------------------------------------------------");
txtFile.writeln("TC-In | TC-Out | Dauer | Name");
txtFile.writeln("----------------------------------------------------------");
for (var j = 0; j < singleClipEntries.length; j++) {
var e = singleClipEntries[j];
var inStr = formatSeconds(e.inSec);
var outStr = formatSeconds(e.outSec);
var durStr = formatSeconds(e.durSec);
txtFile.writeln(inStr + " | " + outStr + " | " + durStr + " | " + e.name);
}
txtFile.writeln("");
txtFile.writeln("----------------------------------------------------------");
txtFile.writeln("Anzahl Clip-Instanzen (alle Eins\u00e4tze): " + clipInstanceCount);
if (effectiveConfig.groupByName) {
if (csvFile) {
csvFile.writeln("Name;GesamtDauerHHMMSS;GesamtDauerSekunden");
}
for (var g = 0; g < keys.length; g++) {
var groupedClipName = keys[g];
var groupedTotalSec = durationsByName[groupedClipName];
var groupedTotalStr = formatSeconds(groupedTotalSec);
if (csvFile) {
csvFile.writeln(groupedClipName + ";" + groupedTotalStr + ";" + groupedTotalSec);
}
if (jsonFile) {
var line = ' { "name": "' + escapeJsonString(groupedClipName) + '", "totalSeconds": ' + groupedTotalSec + ', "totalTimecode": "' + groupedTotalStr + '" }';
if (g < uniqueCount - 1) {
line += ",";
}
jsonFile.writeln(line);
}
}
} else {
if (csvFile) {
csvFile.writeln("TCIn;TCOut;Dauer;Name");
}
for (var s = 0; s < singleClipEntries.length; s++) {
var singleEntry = singleClipEntries[s];
var singleInStr = formatSeconds(singleEntry.inSec);
var singleOutStr = formatSeconds(singleEntry.outSec);
var singleDurStr = formatSeconds(singleEntry.durSec);
if (csvFile) {
csvFile.writeln(singleInStr + ";" + singleOutStr + ";" + singleDurStr + ";" + singleEntry.name);
}
if (jsonFile) {
var jLine = ' { "name": "' + escapeJsonString(singleEntry.name) + '", "tcIn": "' + singleInStr + '", "tcOut": "' + singleOutStr + '", "duration": "' + singleDurStr + '", "durationSeconds": ' + singleEntry.durSec + ', "tcInSeconds": ' + singleEntry.inSec + ', "tcOutSeconds": ' + singleEntry.outSec + ' }';
if (s < singleClipEntries.length - 1) {
jLine += ",";
}
jsonFile.writeln(jLine);
}
}
}
if (jsonFile) {
jsonFile.writeln(" ]");
jsonFile.writeln("}");
}
txtFile.close();
if (csvFile) {
csvFile.close();
}
if (jsonFile) {
jsonFile.close();
}
var msg = "Export abgeschlossen.\n" + "Clip-Instanzen (alle Eins\u00e4tze): " + clipInstanceCount + "\n" + "Gruppiert nach Name: " + effectiveConfig.groupByName + "\n" + "TXT: " + txtFile.fsName;
if (csvFile) {
msg += "\nCSV: " + csvFile.fsName;
}
if (jsonFile) {
msg += "\nJSON: " + jsonFile.fsName;
}
alert(msg);
}
var uiFilter = {
extensions: parseAudioExtensions(audioformate),
groupByName: group_clips === 'true',
csv: file_csv === 'true',
json: file_json === 'true'
};
exportAudioClipsFromActiveSequence(uiFilter);
Rohdaten
{
"class": "nodes.actions.helmut.job.JobPremiereExecuteExtendScriptActionV2",
"deprecated": false,
"properties": {
"extendScript": "var group_clips = '{stream.variable.group_clips}'; var file_csv = '{stream.variable.file_csv}'; var file_json = '{stream.variable.file_json}'; var audioformate = '{stream.variable.audio_formate}'; var AudioExportConfig = { extensions: { wav: true, aiff: true, mp3: true, m4a: true, aac: true }, groupByName: true, csv: false, json: false }; function parseAudioExtensions(str) { var validExt = [\"wav\", \"aif\", \"aiff\", \"mp3\", \"m4a\", \"aac\"]; if (!str || typeof str !== \"string\") { var empty = {}; for (var i = 0; i < validExt.length; i++) { empty[validExt[i]] = false; } return empty; } var cleaned = str.toLowerCase(); cleaned = cleaned.replace(/[\\s]+/g, \"\"); cleaned = cleaned.replace(/;/g, \",\"); cleaned = cleaned.replace(/,+/g, \",\"); cleaned = cleaned.replace(/^,|,$/g, \"\"); if (cleaned === \"\") { var empty2 = {}; for (var j = 0; j < validExt.length; j++) { empty2[validExt[j]] = false; } return empty2; } var parts = cleaned.split(\",\"); var out = {}; var x; for (x = 0; x < validExt.length; x++) { out[validExt[x]] = false; } for (var k = 0; k < parts.length; k++) { var ext = parts[k]; if (!ext) { continue; } var isValid = false; for (var v = 0; v < validExt.length; v++) { if (validExt[v] === ext) { isValid = true; break; } } if (isValid) { out[ext] = true; } } return out; } function exportAudioClipsFromActiveSequence(cfg) { if (!app.project || !app.project.activeSequence) { alert(\"Keine aktive Sequenz gefunden.\"); return; } var seq = app.project.activeSequence; var audioTracks = seq.audioTracks; if (!audioTracks || audioTracks.numTracks === 0) { alert(\"Die aktive Sequenz hat keine Audio-Tracks.\"); return; } var effectiveConfig = { extensions: { wav: (cfg && cfg.extensions && typeof cfg.extensions.wav === \"boolean\") ? cfg.extensions.wav : AudioExportConfig.extensions.wav, aif: (cfg && cfg.extensions && typeof cfg.extensions.aif === \"boolean\") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff, aiff: (cfg && cfg.extensions && typeof cfg.extensions.aiff === \"boolean\") ? cfg.extensions.aiff : AudioExportConfig.extensions.aiff, mp3: (cfg && cfg.extensions && typeof cfg.extensions.mp3 === \"boolean\") ? cfg.extensions.mp3 : AudioExportConfig.extensions.mp3, m4a: (cfg && cfg.extensions && typeof cfg.extensions.m4a === \"boolean\") ? cfg.extensions.m4a : AudioExportConfig.extensions.m4a, aac: (cfg && cfg.extensions && typeof cfg.extensions.aac === \"boolean\") ? cfg.extensions.aac : AudioExportConfig.extensions.aac }, groupByName: (cfg && typeof cfg.groupByName === \"boolean\") ? cfg.groupByName : AudioExportConfig.groupByName, csv: (cfg && typeof cfg.csv === \"boolean\") ? cfg.csv : AudioExportConfig.csv, json: (cfg && typeof cfg.json === \"boolean\") ? cfg.json : AudioExportConfig.json }; var TICKS_PER_SECOND = 254016000000.0; var zeroSec = 0; try { if (seq.zeroPoint !== undefined && seq.zeroPoint !== null) { var zeroTicks = parseFloat(seq.zeroPoint); if (!isNaN(zeroTicks)) { zeroSec = zeroTicks / TICKS_PER_SECOND; } } } catch (eZ) { zeroSec = 0; } var safeSeqName = sanitizeName(seq.name); var txtPath = Folder.desktop.fsName + \"/AudioClipListe_\" + safeSeqName + \".txt\"; var txtFile = new File(txtPath); txtFile.encoding = \"UTF-8\"; if (!txtFile.open(\"w\", \"TEXT\", \"????\")) { alert(\"Konnte die Textdatei nicht \\u00f6ffnen.\"); return; } var csvFile = null; if (effectiveConfig.csv) { var csvPath = Folder.desktop.fsName + \"/AudioClipListe_\" + safeSeqName + \".csv\"; csvFile = new File(csvPath); csvFile.encoding = \"UTF-8\"; if (!csvFile.open(\"w\", \"TEXT\", \"????\")) { alert(\"Konnte die CSV-Datei nicht \\u00f6ffnen. Es wird nur TXT geschrieben.\"); csvFile = null; } } var jsonFile = null; if (effectiveConfig.json) { var jsonPath = Folder.desktop.fsName + \"/AudioClipListe_\" + safeSeqName + \".json\"; jsonFile = new File(jsonPath); jsonFile.encoding = \"UTF-8\"; if (!jsonFile.open(\"w\", \"TEXT\", \"????\")) { alert(\"Konnte die JSON-Datei nicht \\u00f6ffnen. Es wird nur TXT/CSV geschrieben.\"); jsonFile = null; } } txtFile.writeln(\"Audio-Clip-Liste f\\u00fcr Sequenz: \" + seq.name); txtFile.writeln(\"-----------------------------------------------------\"); txtFile.writeln( \"Filter: \" + \"mp3=\" + effectiveConfig.extensions.mp3 + \", \" + \"m4a=\" + effectiveConfig.extensions.m4a + \", \" + \"wav=\" + effectiveConfig.extensions.wav + \", \" + \"aiff=\" + effectiveConfig.extensions.aiff + \", \" + \"aac=\" + effectiveConfig.extensions.aac ); txtFile.writeln(\"Gruppieren nach Name: \" + effectiveConfig.groupByName); txtFile.writeln(\"\"); function formatSeconds(sec) { if (sec < 0) sec = 0; var sInt = Math.floor(sec); var h = Math.floor(sInt / 3600); var m = Math.floor((sInt [<]%[>] 3600) / 60); var s = sInt [<]%[>] 60; function pad2(n) { return (n < 10 ? \"0\" : \"\") + n; } return pad2(h) + \":\" + pad2(m) + \":\" + pad2(s); } function sanitizeName(name) { if (!name) return \"Sequence\"; var s = name.toString(); s = s.replace(/[^a-zA-Z0-9_\\-]/g, \"_\"); s = s.replace(/_+/g, \"_\"); s = s.replace(/^_+|_+$/g, \"\"); if (s.length === 0) s = \"Sequence\"; return s; } function escapeJsonString(str) { if (str === null || str === undefined) { return \"\"; } var s = String(str); s = s.replace(/\\\\/g, \"\\\\\\\\\"); s = s.replace(/\"/g, \"\\\\\\\"\"); s = s.replace(/\\r/g, \"\\\\r\"); s = s.replace(/\\n/g, \"\\\\n\"); s = s.replace(/\\t/g, \"\\\\t\"); return s; } function hasSupportedAudioExtension(name, cfgExt) { if (!name) return false; var lower = name.toLowerCase(); var dotPos = lower.lastIndexOf(\".\"); if (dotPos < 0) return false; var ext = lower.substring(dotPos + 1); if (ext === \"mp3\" && cfgExt.mp3) return true; if (ext === \"m4a\" && cfgExt.m4a) return true; if (ext === \"wav\" && cfgExt.wav) return true; if (ext === \"aiff\" && cfgExt.aiff) return true; if (ext === \"aif\" && cfgExt.aiff) return true; return false; } function isLinkedToVideo(trackItem) { if (!trackItem || !trackItem.getLinkedItems) { return false; } var linked; try { linked = trackItem.getLinkedItems(); } catch (e) { $.writeln(\"Fehler bei getLinkedItems: \" + e); return false; } if (!linked) { return false; } try { var len = (linked.length !== undefined) ? linked.length : linked.numItems; for (var i = 0; i < len; i++) { var li = linked[i]; if (!li) continue; var parentTrack = li.parentTrack; if (parentTrack && parentTrack.isVideo === true) { return true; } return true; } } catch (e2) { $.writeln(\"Fehler bei Auswertung der Linked Items: \" + e2); } return false; } var clipInstanceCount = 0; var durationsByName = {}; var singleClipEntries = []; for (var t = 0; t < audioTracks.numTracks; t++) { var track = audioTracks[t]; if (!track || !track.clips) continue; var clips = track.clips; var numClips = clips.numItems; for (var c = 0; c < numClips; c++) { var item = clips[c]; if (!item) continue; if (isLinkedToVideo(item)) { continue; } var projItem = item.projectItem; if (!projItem) continue; var name = projItem.name; if (!hasSupportedAudioExtension(name, effectiveConfig.extensions)) { continue; } var inTimelineSec = 0; var outTimelineSec = 0; try { if (item.start && item.start.seconds !== undefined) { inTimelineSec = item.start.seconds; } if (item.end && item.end.seconds !== undefined) { outTimelineSec = item.end.seconds; } } catch (e3) { } var durationSeconds = 0; var rawDur = outTimelineSec - inTimelineSec; if (rawDur > 0) { durationSeconds = Math.ceil(rawDur); } else if (item.duration && item.duration.seconds !== undefined) { durationSeconds = Math.ceil(item.duration.seconds); } else { durationSeconds = 0; } if (durationSeconds < 0) { durationSeconds = 0; } clipInstanceCount++; if (durationsByName[name] === undefined) { durationsByName[name] = 0; } durationsByName[name] += durationSeconds; var displayInSec = Math.floor(zeroSec + inTimelineSec); var displayOutSec = displayInSec + durationSeconds; singleClipEntries.push({ name: name, inSec: displayInSec, outSec: displayOutSec, durSec: durationSeconds }); } } if (jsonFile) { jsonFile.writeln(\"{\"); jsonFile.writeln(' \"sequenceName\": \"' + escapeJsonString(seq.name) + '\",'); jsonFile.writeln(' \"sequenceStartSeconds\": ' + zeroSec + \",\"); jsonFile.writeln(' \"groupByName\": ' + (effectiveConfig.groupByName ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"extensions\": {'); jsonFile.writeln(' \"wav\": ' + (effectiveConfig.extensions.wav ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"aif\": ' + (effectiveConfig.extensions.aif ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"aiff\": ' + (effectiveConfig.extensions.aiff ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"mp3\": ' + (effectiveConfig.extensions.mp3 ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"m4a\": ' + (effectiveConfig.extensions.m4a ? \"true\" : \"false\") + \",\"); jsonFile.writeln(' \"aac\": ' + (effectiveConfig.extensions.aac ? \"true\" : \"false\")); jsonFile.writeln(\" },\"); jsonFile.writeln(' \"clips\": ['); } var keys = []; for (var k in durationsByName) { if (durationsByName.hasOwnProperty(k)) { keys.push(k); } } keys.sort(); var uniqueCount = keys.length; singleClipEntries.sort(function (a, b) { return a.inSec - b.inSec; }); txtFile.writeln(\"Zusammengefasste Liste\"); txtFile.writeln(\"----------------------------------------------\"); txtFile.writeln(\"Name | Gesamt-Dauer\"); txtFile.writeln(\"----------------------------------------------\"); for (var i = 0; i < keys.length; i++) { var clipName = keys[i]; var totalSec = durationsByName[clipName]; var totalStr = formatSeconds(totalSec); txtFile.writeln(clipName + \" | \" + totalStr); } txtFile.writeln(\"\"); txtFile.writeln(\"----------------------------------------------\"); txtFile.writeln(\"Anzahl Clip-Instanzen (alle Eins\\u00e4tze): \" + clipInstanceCount); txtFile.writeln(\"Anzahl eindeutiger Audio-Dateinamen: \" + uniqueCount); txtFile.writeln(\"\"); txtFile.writeln(\"\"); txtFile.writeln(\"Einzelausgabe\"); txtFile.writeln(\"----------------------------------------------------------\"); txtFile.writeln(\"TC-In | TC-Out | Dauer | Name\"); txtFile.writeln(\"----------------------------------------------------------\"); for (var j = 0; j < singleClipEntries.length; j++) { var e = singleClipEntries[j]; var inStr = formatSeconds(e.inSec); var outStr = formatSeconds(e.outSec); var durStr = formatSeconds(e.durSec); txtFile.writeln(inStr + \" | \" + outStr + \" | \" + durStr + \" | \" + e.name); } txtFile.writeln(\"\"); txtFile.writeln(\"----------------------------------------------------------\"); txtFile.writeln(\"Anzahl Clip-Instanzen (alle Eins\\u00e4tze): \" + clipInstanceCount); if (effectiveConfig.groupByName) { if (csvFile) { csvFile.writeln(\"Name;GesamtDauerHHMMSS;GesamtDauerSekunden\"); } for (var g = 0; g < keys.length; g++) { var groupedClipName = keys[g]; var groupedTotalSec = durationsByName[groupedClipName]; var groupedTotalStr = formatSeconds(groupedTotalSec); if (csvFile) { csvFile.writeln(groupedClipName + \";\" + groupedTotalStr + \";\" + groupedTotalSec); } if (jsonFile) { var line = ' { \"name\": \"' + escapeJsonString(groupedClipName) + '\", \"totalSeconds\": ' + groupedTotalSec + ', \"totalTimecode\": \"' + groupedTotalStr + '\" }'; if (g < uniqueCount - 1) { line += \",\"; } jsonFile.writeln(line); } } } else { if (csvFile) { csvFile.writeln(\"TCIn;TCOut;Dauer;Name\"); } for (var s = 0; s < singleClipEntries.length; s++) { var singleEntry = singleClipEntries[s]; var singleInStr = formatSeconds(singleEntry.inSec); var singleOutStr = formatSeconds(singleEntry.outSec); var singleDurStr = formatSeconds(singleEntry.durSec); if (csvFile) { csvFile.writeln(singleInStr + \";\" + singleOutStr + \";\" + singleDurStr + \";\" + singleEntry.name); } if (jsonFile) { var jLine = ' { \"name\": \"' + escapeJsonString(singleEntry.name) + '\", \"tcIn\": \"' + singleInStr + '\", \"tcOut\": \"' + singleOutStr + '\", \"duration\": \"' + singleDurStr + '\", \"durationSeconds\": ' + singleEntry.durSec + ', \"tcInSeconds\": ' + singleEntry.inSec + ', \"tcOutSeconds\": ' + singleEntry.outSec + ' }'; if (s < singleClipEntries.length - 1) { jLine += \",\"; } jsonFile.writeln(jLine); } } } if (jsonFile) { jsonFile.writeln(\" ]\"); jsonFile.writeln(\"}\"); } txtFile.close(); if (csvFile) { csvFile.close(); } if (jsonFile) { jsonFile.close(); } var msg = \"Export abgeschlossen.\\n\" + \"Clip-Instanzen (alle Eins\\u00e4tze): \" + clipInstanceCount + \"\\n\" + \"Gruppiert nach Name: \" + effectiveConfig.groupByName + \"\\n\" + \"TXT: \" + txtFile.fsName; if (csvFile) { msg += \"\\nCSV: \" + csvFile.fsName; } if (jsonFile) { msg += \"\\nJSON: \" + jsonFile.fsName; } alert(msg); } var uiFilter = { extensions: parseAudioExtensions(audioformate), groupByName: group_clips === 'true', csv: file_csv === 'true', json: file_json === 'true' }; exportAudioClipsFromActiveSequence(uiFilter);",
"nodeUUID": "56eacfc1-766a-42c5-8c99-e801c6497436",
"successNodeUUID": "fcfc9587-d02a-4ee2-ac45-d40ed8e8fc67"
}
}