Video editing is complex to code. I have used these components to build my own player and video editor which, although serviceable, are still not good enough to release (although they are better than a lot of commercial offerings). The work contained in these components is the result of several years of work. If you want to build a serviceable video editor then you should consider these components as a starting point and commit yourself to some hard work. Be wary of coding new features because you could simply be re-implementing functions that are already implemented in the components
The free download does not include source code or help files. You will need these if you are a serious developer. You will also need access to suitable DirectShow filters for demultiplexing, decoding, encoding and multiplexing. The Pack requires the dll "mpgConf.dll" to be in the application folder or, for use only in the IDE, the Delphi Bin folder.
AAFLogger collects numerous methods useful for building media logging applications into a single component. It allows to open and save AAF logging files, change the file extension used for them, open temporary files while the application is working on them so as not to damage the original AAF file, should the application crash or lock up.
It should have open and close dialogs assigned to it and an AAFLoggingAccess component so it can access AAF files. It can also have an RSPlayerLib and an RSTimeline attached so it can load and play logging files and present the files, their shots and key frames on a timeline. It can also provide undo and redo facilities. It can also break a media file into its component shots either automatically, using an RSThreadCutDetector, or manually under user control.
AAFEditor collects numerous methods useful for making video editors into a single component. It allows to open and save AAF editing files, change the file extension used for them and open temporary files while the application is working on them as for AAFLogger.
It should have open and close dialogs attached and an AAFEditAccess to allow it to access AAF files. It can also have an AAFLoggingAccess attached so the class can gather metadata from a logging file when a clip is loaded into the editing timeline. The class has methods for building sequences of clips, adding audio and video effects, commenting the production and linking to an RSMediaSequence and RSTimeline. It can also provide undo and redo facilities.
Most of the code required for building an editor can be found in this component so it is a good idea to rummage through the file to see what is offered.
AAFCreator provides a means to create, edit and save AAF files. It provides most of the background content required including the Product Identification.
AAFLoggingAccess provides a means to create, edit and save AAF logging files. It descends from AAFCreator and so provides the Product Identification. It provides file content required to add user comments and implements the WorkOnBackup facility used by AAFLogger.
AAFEditAccess provides a means to create, edit and save AAF editing files. It descends from AAFCreator and so provides the Product Identification. It provides file content required to add user comments and implements the WorkOnBackup facility used by AAFEditor. It allows inclusion of a Nested Scope class in the AAF file. This can be used to add overlay tracks to the file but this has not yet been implemented. It allows a default audio fade to be set and audio and video effects to be described in the file.
RSUndoRedo provides a sophisticated undo redo facility. (sophisticated = too clever for its own good). An AAF file, if constructed without internal media, is relatively small and quick to read and save. This makes undo and redo relatively quick and slick. Professionals like to make many versions of their production in the hope that one will turn out good. This means they have to either manage lots of separate versions or us a "sophisticated" undo/redo tool.
This component allows a branched undo/redo tree to be constructed starting from a common file. The user can make numerous branches, developing each one separately. They can then move from any point in version x to any point in version y simply by checking an item in a branched tree, the production changes to the newly selected version without loosing information. The only real challenge is to give the versions descriptive names.
RSKeyFramePuller allows pulling of selected frames from a media file. You build a list of file positions pulled from an AAF file and present it to the key frame puller which then returns bitmaps for each position. The component can be used to populate a ListView to show thumbnail previews of shots or to put key frames onto a timeline. The component provides three different sizes of bitmap so the ListView can show small, medium or large thumbnails.
The component runs on its own thread so your application can continue responding to the user while it's running. Call-backs are synchronised to the application thread so you do not need to know about thread synchronisation.
RSLogin provides a login dialog which can be used to allow a user to provide credentials to an application.
RSMediaConverter allows conversion of media files between different formats. If the destination format is mpeg2, the class will attempt to index the output file once it has been converted. It allows separate parameter settings for standard and high definition.
The component currently uses Moonlight Cordless or Elecard/Main Concept DirectShow encoding filters so you will need to have these installed.
RSThreadCutDetector runs through a media file identifying shots. It runs on its own thread so your application can continue responding while it is running. It provides call backs synchronised to the application thread so you do not need to know about thread synchronisation.
RSTimecodeEdit displays an industry standard timeline value in the format HH:MM:SS:FF. It accepts time values in seconds, milli seconds and DirectShow "Media Time". You can also enter timecodes values into each of the four segments using a click to select, or into the entire timecode where it fills from the right hand side. Increment and decrement of each section are also provided.
RSMediaSequence provides replay services for a media composition. It builds a DirectShow graph that includes source filters for each of the audio/video clips, decoders, and mixers to combine the clips into a sequence. It is slaved to an RSTimeline which in turn is loaded from an AAF file. The media sequence applies the effects and transitions to the actual media clips.
The Sequence can be replayed in real-time, dragged through the timeline rapidly, using indexes when the media format is mpeg 2, and positioned frame accurately in response to cues from other components, to show a key frame or the location of a comment for instance. It also renders the sequence to the formats for which you have DirectShow encoding filters installed.
RSPlayerLib provides replay facilities for single media files. It specialises in mpeg2 replay where it allows frame accurate positioning and rapid "scrub play" without consuming inordinate amounts of network bandwidth. It uses indexed files to achieve this performance using my mpeg2 demultiplexer and indexing tools.
It also provides more fluid "scrub" play for avi files if you install my DirectShow avi splitter, although frame accurate positioning is not always provided by the decoder filters for many of the media formats contained in avi files.
RSTimeline provides a professional style timeline view. The timeline has a programmable number of video, overlay, effects and audio tracks as well as tracks for showing timed text comments. It can show video in ABRoll style, popular among experienced editors, or as a single track with effects laid on top of the clips.
The component supports placing comments on the tracks, linking them to a player or a comments grid so that when a user clicks a comment on the timeline, a player can move to the corresponding media frame and to the comment in a grid component.
The timeline also supports drag and drop of media clips and effects to itself and drag of clips to a player so that its in and out points can be adjusted. If a clip is dragged back onto the timeline at its original position, it will replace the existing clip. If it is dragged elsewhere, it will be added and provided with a new unique ID. The timeline also supports internal drag and drop of clips or clip sets as well as copy, cut and paste.
RSThreadTimecode provides conversions between time formats and timecode text. The component is thread safe so it can be called from threads other than the application thread.