// A header for all non-pirates // In XXI century we made Software finally FREE and it did good for us and the society // // MIT License // // Copyright (c) 2020 Aleksey Sudakov // var args = process.argv.splice(process.execArgv.length + 2); var edl_file = args[0]; if (edl_file == null) { console.log("Sorry, need an EDL file"); process.exit(-1); } var playlist = {"@id":"main_bin", "property" : {"@name" :"xml_retain","#":1}, "entry":[]}; var timeline = {"@id":"timeline", "entry":[]}; var background = {"@id":"background", "entry": {"@producer" :"black"}}; var producers = [ {"@id":"black", "property" : [ {"@name" :"aspect_ratio","#":1}, {"@name" :"mlt_service","#":"color"}, {"@name" :"mlt_image_format","#":"rgb24a"}, {"@name" :"set.test_audio","#":0}, ]} ] var mlt = {mlt: { "producer" : producers, "playlist":[playlist, timeline,background], "tractor": { "@id":"tractor0", "property" : {"@name" :"shotcut","#":1}, "track": [{"@producer":"background"}, {"@producer":"timeline"}] } } } var total_frames = 0; var i=-1; const EDL = require('edl-genius'); let edl = new EDL(29.97, 'cmx3600'); edl.readFile(edl_file) .then((edl) => { edl.events.forEach(function(event) { // console.log(event.sourceStart.toString() + " - " + event.sourceEnd.toString()); i++; var start_frame = event.sourceStart.frameCount(); var end_frame = event.sourceEnd.frameCount(); total_frames += end_frame-start_frame; var video = {"@id":i, "@resource": event.sourceClip} /* You could add Video filters in bulk too! Like so... video.filter=[ {"@id":"filter0_"+i, "@in": start_frame, "@out": end_frame, "property" : [ {"@id":"filter1_"+i, "@in": start_frame, "@out": end_frame, "property" : [ {"@name" :"version","#":0.1}, {"@name" :"mlt_service","#":"frei0r.colgate"}, {"@name" :"disable","#":1}, ]}, // Levels {"@id":"filter2_"+i, "@in": start_frame, "@out": end_frame, "property" : [ {"@name" :"mlt_service","#":"frei0r.levels"}, {"@name" :"0","#":0.3}, // Channel??? {"@name" :"1","#":0.0588235}, // in black 15% {"@name" :"2","#":0.764706}, // in white 195 {"@name" :"3","#":0.25}, // gamma 1.0 = 0.25 - default, 0.275 = 1.1 inside, 0.225 = 0.9 {"@name" :"disable","#":1}, ]}, // Saturation {"@id":"filter3_"+i, "@in": start_frame, "@out": end_frame, "property" : [ {"@name" :"0","#":0.1125}, //90% {"@name" :"mlt_service","#":"frei0r.saturat0r"}, {"@name" :"disable","#":1}, ]}, // hqdn3d {"@id":"filter_last_"+i, "@in": start_frame, "@out": end_frame, "property" : [ {"@name" :"version","#":0.1}, {"@name" :"mlt_service","#":"frei0r.hqdn3d"}, {"@name" :"0","#":"0.3"}, {"@name" :"1","#":"0.1"}, {"@name" :"disable","#":1}, ]}, ]; */ producers.push(video); var clip = {"@producer":i, "@in": start_frame, "@out": end_frame} playlist.entry.push(clip); timeline.entry.push(clip); }); var toXML = require("to-xml").toXML var xml = toXML(mlt, null, 2); console.log(xml) })