drift-meter/kdenlive.mjs

105 lines
3.7 KiB
JavaScript
Executable File

#!/usr/bin/zx --quiet
import { formatDuration } from "./util.mjs";
import Producer from "./producer.mjs";
export default async function kdenliveProject(
source_files,
project_settings, // const project_settings = { fps: 30 };
clips
) {
const producers = await Promise.all(source_files.map(Producer.fromFile));
return `<?xml version='1.0' encoding='utf-8'?>
<mlt LC_NUMERIC="C" producer="main_bin" version="7.0.0" root="/home/kuba/Downloads">
<profile frame_rate_num="${
project_settings.fps
}" 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"/>
${(
await Promise.all(
producers.map((producer) => producer.toXML(project_settings))
)
).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>
<property name="kdenlive:docproperties.version">1.02</property>
<property name="kdenlive:expandedFolders"/>
<property name="kdenlive:documentnotes"/>
<property name="xml_retain">1</property>
${producers
.map(
(producer, index) =>
`<entry producer="producer${index}" in="00:00:00.000" out="${producer.getDuration()}"/>`
)
.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>
</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>
`;
}
const project_content = await kdenliveProject(
["/home/kuba/Videos/5min.mp4", "/home/kuba/Videos/5min.wav"],
{
fps: 30,
}
);
await $`echo ${project_content} > project-generated.kdenlive`;