I have used iMovie and Final Cut Pro for video projects. I find them easy to work with and intuitive to some degree. After I finish the project, I may want to change one word that appears multiple times, and I have to do it by hand. Also, the projects take a lot of space.

I am looking for a video editor where the video project file is plain text, which I understand to be an edit decision list. My goals are:

  • to separate heavy digital assets from the light edit decision list
  • to put the edit decision list into a version control system like Git and GitHub
  • to automate some parts of editing with the keyboard, e.g. find-and-replace on captions, change times and durations, and adjust multiple dB levels
  • to have a cross-platform solution for collaborators on different operating systems (Windows, macOS, and Linux)

Two examples outside of video production are OpenSCAD in 3D modelling, which generates STL files from plain-text files that are two orders of magnitude smaller; and Inkscape, which reads and writes plain-text SVG files.

I found this article on opensource.com that mentions Kdenlive and Flowblade, but plain-text files seem an export rather than the proejct file itself.

The closest that I found would be Bash scripting based on FFMPEG for video concatenation and effects, and SVG for graphic overlays.

Does such a tool exist?

  • 1
    I too am begging for this. I hate that iMovie, Premiere etc. projects can't be easily tweaked years later and with a text editor. I wish SMIL had more interest. M3u VLC extensions are my latest hope. Commented Jul 8 at 23:25
  • 1
    @SridharSarnobat I added an answer with what I use now: Kdenlive.
    – emonigma
    Commented Jul 10 at 10:55
  • 1
    Thanks. I don't suppose you ever tried melt did you? mltframework.org/docs/melt Commented Jul 10 at 23:51
  • 1
    @SridharSarnobat MLT (melt) looks very cool! I have never tried it, no. From your other comments, I realized that it's the basis for rendering in Kdenlive and I edited the answer. If you do try it, please consider adding an answer with sample code.
    – emonigma
    Commented Jul 12 at 7:15

2 Answers 2


AviSynth seems to be the tool that directly answers your needs on Windows. This is a completely script-based editing approach, with quite powerful instruments (built-in or as plug-ins) for reading, processing, generating titles and general editing.

Coupled with a dedicated editor such as AVSEdit or AvsP, you can have previews, context help, parameter completion and similar things one can expect from an IDE.

A completely different approach is to use an editor that has text-like project files. Adobe Premiere Pro, for example, uses project files (*.prproj) that are essentially XML files. (Newer CC version have it gzip-compressed, but it's easy to unpack them). Now, XML is not quite 'plain-text', and prproj are not made human-friendly, but it's possible to tweak some little things like titles. I wouldn't recommend this approach though.

  • 1
    That seems exactly what I want, but it is for Windows only. I updated the question.
    – emonigma
    Commented Aug 8, 2019 at 12:33
  • Did you try it with Wine?
    – Mawg
    Commented Aug 8, 2019 at 15:28
  • 1
    I'm accepting the answer because the thread got no other answers in 7 months and because I have used Avisynth for a month now and am very happy with it. See this answer for an installation guide that avoids common pitfalls.
    – emonigma
    Commented Feb 12, 2020 at 15:39
  • 1
    @MawgsaysreinstateMonica I used a spare Windows desktop computer. I prefer to overload an old desktop with video editing and compression than to shorten the life of the CPU on my macOS computer.
    – emonigma
    Commented Feb 12, 2020 at 17:08

I've now settled for Kdenlive. It's cross-platform: Windows, Linux, and macOS. It has a GUI, the source files are text and XML (about 50kB) and can be easily copied, version-controlled and edited with a text editor. The program keeps the rendering cache separate from the source files and it can generate scripts to batch-render multiple files at once. I've been using it for a year and migrated all my relevant projects to it.

It is based on MLT (melt):

Kdenlive's project files (.kdenlive files) use an XML format, based on MLT's format (see MLT’s XML documentation and MLT’s DTD/document type definition) to describe the source media used in a project, as well as the use of that media as in the timeline.

Here is example project file from the GitHub documentation:

<mlt producer="main_bin" ...>

  <!-- the profile - definition of the project profile (frame size, aspect ration, etc) -->
  <profile frame_rate_num="25" .../>

  <!-- definition of master and timeline clips used in the first sequence clips -->
  <producer id="producer0" .../>
  <producer id="producer1" .../>

  <!-- then comes the playlist definition - a list of the empty spaces and clips on a track -->
  <playlist id="playlist0">
    <!-- entries linking to the producers defined above -->
    <entry producer="producer0" in="00:00:00.000" out="00:00:04.960">
      <property name="kdenlive:id">3</property>
    <blank length="00:00:03.720"/> <!-- space between clips -->
    <entry producer="producer1" />
  <playlist id="playlist1"/>

  <!-- After that we have the tracks embedded in a tractor. Each Kdenlive timeline track is made of 2 *tracks* to allow mixes-->
  <tractor id="tractor0" in="00:00:00.000" out="00:02:20.840">
    <property name="kdenlive:..">...</property>
    <track hide="audio" producer="playlist0"/> <!-- hide audio, because this is a video track -->
    <track hide="audio" producer="playlist1"/>

  <!-- After the tracks definition, we have the first timeline sequence tractor that has a kdenlive:uuid attribute, and transitions between the tracks -->
  <tractor id="tractor6" ...>
    <property name="kdenlive:uuid">...</property>
    <track hide="audio" producer="tractor0"/>
    <track hide="audio" producer="tractor1"/>

    <!-- all transitions -->
    <transition id="transition0"/> <!-- user transitions -->
    <transition id="transition1"> <!-- internally added transition (for example audio mix) -->
      <property name="internal_added">237</property>


  <!-- If we have multiple timeline sequence clips, we repeat the above steps -->
  <producer id="producer3" .../>
  <playlist id="playlist3" ../>
  <tractor id="tractor7" .../>
  <tractor id="tractor11" ...>
    <property name="kdenlive:uuid">...</property>
    <track hide="audio" producer="tractor7"/>
    <track hide="audio" producer="tractor8"/>

  <!-- The *main bin* playlist, keeping all project settings, and a list of all project bin clips, including the sequence clips  -->
  <playlist id="main_bin">
    <property name="kdenlive:documentproperty...">...</property>
    <entry producer="producer0" .../>
    <entry producer="producer1" .../>
    <entry producer="tractor6" .../>
    <entry producer="tractor11" .../>

  <!-- the last tractor of the xml file only contains one producerm is a the main tractor, containing the default sequence clip that will be played -->
  <tractor id="tractor23" in="00:00:00.000" out="00:00:45.000">
    <property name="kdenlive:projectTractor">1</property>
    <track producer="tractor11" in="00:00:00.000" out="00:00:45.000"/>


With some luck, you can export XML from iMovie to Final Cut Pro and then to Premiere, then to OpenTimelineIO, and import into Kdenlive (see a series of threads on StackOverflow about it:




  • 1
    ...and apparently it's cross-platform. Thanks for sharing your experience, I need to give this a try. Commented Jul 10 at 23:47
  • 1
    Example project file: github.com/KDE/kdenlive/blob/master/dev-docs/… Commented Jul 10 at 23:49
  • 1
    Thanks, I added these details in the answer. And today I learned that Kdenlive is based on Melt!
    – emonigma
    Commented Jul 12 at 7:14
  • 1
    thanks for researching. It feels too good to be true, I'll proceed with cautious optimism and like you say I will come back with any sample code that might be simpler than this github example, so that more people can evaluate it as their solution. Commented Jul 12 at 20:11
  • 1
    @SridharSarnobat I'm very happy with it and regretful that I didn't find it sooner. Please share your impressions and feedback after testing, whether positive or negative, so that other people can benefit from your experience.
    – emonigma
    Commented Jul 13 at 14:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.