First I thought there weren't any video editing programs for Linux. After a bit of searching I found a few. But somehow non of these worked for me. Some are unstable and crash, others are unusable. I still do like to edit some videos on my Linux box. And as it seems I've started a company a few weeks ago. So maybe my next product will be a video editing program.
After a bit of thinking I came up with the following few requirements for a useful video editing program:
- Loading video
- Saving/rendering video
- Selecting a clip of the video
- Saving the clip to a clipboard
- Order the clips (from the clipboard) in a playlist to create a new video
- Keybindings for moving through the video
- Keybindings for selecting the beginning and the end of a clip
For the datamodel the following could be used:
- frame = image
- video = const list of frames
- clip = (begin, end, video)
- clipboard = set of clips
- playlist = list of clips
These few classes will make it easy to create a video editing program. A frame is just an image. In this model a video will always be the same. This way a clip can be changed after it has been copied from a video. The clips in this model are a truple of the first frame (begin), the last frame (end) and a reference to the video. The playlist is an ordered list of clips. The order of the playlist will define the order of the frames in the final video. Of course multiple playlist and clipboard can be created.
This model describes the way I think a video editing program should work. It first lets me select all the parts that I want in the final video. Then later I can reorder the various clips to make sense.
The big problem with this model is that it doesn't take care of the audio part of the video. The model could use the audio the same way that it uses the video. I could cut it at the same place where the frame starts. But this is not always the best way to cut your audio.
Maybe I will create this, but somewhere I hope that someone will create this for us, or maybe some of the other programs will become more stable and usable.