2021-10-21 18:40:49 +02:00
|
|
|
#!/usr/bin/zx --quiet
|
|
|
|
|
|
|
|
import { formatDuration } from "./util.mjs";
|
|
|
|
import Producer from "./producer.mjs";
|
|
|
|
|
2021-10-23 20:37:41 +02:00
|
|
|
export default class Project {
|
|
|
|
constructor(fps) {
|
|
|
|
this.producers = [];
|
|
|
|
this.clips = [];
|
|
|
|
this.fps = fps;
|
|
|
|
}
|
|
|
|
|
|
|
|
addProducer(file) {
|
|
|
|
this.producers.push(new Producer(file));
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
async toXML() {
|
|
|
|
return `<?xml version='1.0' encoding='utf-8'?>
|
2021-10-21 18:40:49 +02:00
|
|
|
<mlt LC_NUMERIC="C" producer="main_bin" version="7.0.0" root="/home/kuba/Downloads">
|
|
|
|
<profile frame_rate_num="${
|
2021-10-23 20:37:41 +02:00
|
|
|
this.fps
|
2021-10-21 18:40:49 +02:00
|
|
|
}" sample_aspect_num="1" display_aspect_den="9" colorspace="601" progressive="1" description="1920x1080 29.90fps" display_aspect_num="16" frame_rate_den="1" width="1920" height="1080" sample_aspect_den="1"/>
|
|
|
|
${(
|
2021-10-23 20:37:41 +02:00
|
|
|
await Promise.all(this.producers.map((producer) => producer.toXML(this.fps)))
|
2021-10-21 18:40:49 +02:00
|
|
|
).join("\n")}
|
|
|
|
<playlist id="main_bin">
|
|
|
|
<property name="kdenlive:docproperties.activeTrack">2</property>
|
|
|
|
<property name="kdenlive:docproperties.audioChannels">2</property>
|
|
|
|
<property name="kdenlive:docproperties.audioTarget">1</property>
|
|
|
|
<property name="kdenlive:docproperties.disablepreview">0</property>
|
|
|
|
<property name="kdenlive:docproperties.documentid">1633881496938</property>
|
|
|
|
<property name="kdenlive:docproperties.groups">[
|
|
|
|
]
|
|
|
|
</property>
|
|
|
|
<property name="kdenlive:docproperties.kdenliveversion">21.08.1</property>
|
2021-10-23 20:37:41 +02:00
|
|
|
g <property name="kdenlive:docproperties.version">1.02</property>
|
2021-10-21 18:40:49 +02:00
|
|
|
<property name="kdenlive:expandedFolders"/>
|
|
|
|
<property name="kdenlive:documentnotes"/>
|
|
|
|
<property name="xml_retain">1</property>
|
2021-10-23 20:37:41 +02:00
|
|
|
${this.producers
|
|
|
|
.map((producer) => `<entry producer="producer${producer.index}"/>`)
|
2021-10-21 18:40:49 +02:00
|
|
|
.join("\n")}
|
|
|
|
</playlist>
|
|
|
|
<producer id="black_track" in="00:00:00.000" out="00:08:20.000">
|
|
|
|
<property name="length">2147483647</property>
|
|
|
|
<property name="eof">continue</property>
|
|
|
|
<property name="resource">black</property>
|
|
|
|
<property name="aspect_ratio">1</property>
|
|
|
|
<property name="mlt_service">color</property>
|
|
|
|
<property name="mlt_image_format">rgb24a</property>
|
|
|
|
<property name="set.test_audio">0</property>
|
|
|
|
</producer>
|
|
|
|
<playlist id="playlist0">
|
|
|
|
<property name="kdenlive:audio_track">1</property>
|
2021-10-23 20:37:41 +02:00
|
|
|
<blank length="1000"/>
|
|
|
|
<entry producer="producer1"/>
|
2021-10-21 18:40:49 +02:00
|
|
|
</playlist>
|
|
|
|
<playlist id="playlist1">
|
|
|
|
<property name="kdenlive:audio_track">1</property>
|
|
|
|
</playlist>
|
|
|
|
<tractor id="tractor0" in="00:00:00.000">
|
|
|
|
<property name="kdenlive:audio_track">1</property>
|
|
|
|
<property name="kdenlive:timeline_active">1</property>
|
|
|
|
<track hide="video" producer="playlist0"/>
|
|
|
|
<track hide="video" producer="playlist1"/>
|
|
|
|
</tractor>
|
|
|
|
<playlist id="playlist2">
|
|
|
|
<property name="kdenlive:audio_track">1</property>
|
|
|
|
</playlist>
|
|
|
|
<playlist id="playlist3">
|
|
|
|
<property name="kdenlive:audio_track">1</property>
|
|
|
|
</playlist>
|
|
|
|
<tractor id="tractor1" in="00:00:00.000">
|
|
|
|
<property name="kdenlive:audio_track">1</property>
|
|
|
|
<track hide="video" producer="playlist2"/>
|
|
|
|
<track hide="video" producer="playlist3"/>
|
|
|
|
</tractor>
|
|
|
|
<playlist id="playlist4"/>
|
|
|
|
<playlist id="playlist5"/>
|
|
|
|
<tractor id="tractor2" in="00:00:00.000">
|
|
|
|
<track hide="audio" producer="playlist4"/>
|
|
|
|
<track hide="audio" producer="playlist5"/>
|
|
|
|
</tractor>
|
|
|
|
<playlist id="playlist6"/>
|
|
|
|
<playlist id="playlist7"/>
|
|
|
|
<tractor id="tractor3" in="00:00:00.000">
|
|
|
|
<track hide="audio" producer="playlist6"/>
|
|
|
|
<track hide="audio" producer="playlist7"/>
|
|
|
|
</tractor>
|
|
|
|
<tractor id="tractor4" in="00:00:00.000" out="00:08:20.000">
|
|
|
|
<track producer="black_track"/>
|
|
|
|
<track producer="tractor0"/>
|
|
|
|
<track producer="tractor1"/>
|
|
|
|
<track producer="tractor2"/>
|
|
|
|
<track producer="tractor3"/>
|
|
|
|
</tractor>
|
|
|
|
</mlt>
|
|
|
|
`;
|
2021-10-23 20:37:41 +02:00
|
|
|
}
|
2021-10-21 18:40:49 +02:00
|
|
|
}
|
|
|
|
|
2021-10-23 20:37:41 +02:00
|
|
|
const project = new Project(30);
|
|
|
|
|
|
|
|
project.addProducer("/home/kuba/Videos/5min.mp4");
|
|
|
|
project.addProducer("/home/kuba/Videos/5min.wav");
|
|
|
|
|
|
|
|
await $`echo ${await project.toXML()} > project-generated.kdenlive`;
|