Thursday, July 17, 2008

The Vision

After a vigorous discussion on IRC this morning, my goals for the advanced timeline have crystalized in my mind. I'm shifting from my original focus on the simple timeline, and I am going to concentrate on basic editing in the advanced timeline. I thought I'd share my plans, since currently there are no mock-ups for the Advanced Timeline in any form. I wanted to take the time to include some sketches, but I'm getting tired and I want to get my thoughts out.

Design Principles
  1. Use direct manipulation for most common operations.
  2. Use noun-verb pattern for most other operations: select first, then click a button in the toolbar to perform a command.
  3. Minimize the number of modes. Modes are evil. Use context to decide which action is appropriate.
  4. Constrain actions to sensible values by default. Provide modifiers to override these defaults easily.
  5. Provide feedback. Change cursor styles, provide real time updates.
Most common Tasks
  • navigating the timeline
  • moving sources
  • trimming sources
  • adjusting edit points
Other Tasks
  • deleting sources
  • moving large numbers of sources
  • grouping multiple sources into single source
  • decoupling audio from it's associated video
  • Ruler at the top
  • Sources in the middle
  • Tools at the bottom
  • Tools include: split, select-right, select-left, delete, unlink, group, ungroup,collapse selection,zoom adjustments,
  • shift, ctrl, alt, and ctrl+alt act as quasi-mode modifiers
Design Features
  • Only conventional "tool" is the split tool. By default, you activate it first, then click where you want to cut. Later, I want to implement an alternate way of making cuts with markers, but people are already familiar with the current method, and in this case it makes sense to have a mode because it mimics the act of physically cutting a piece of film. After one cut, the tool resets.
  • Delete, Unlink, Group, Ungroup, Collapse, all operate on current selection. These commands are only sensitive when valid on the current selection.
  • By default, click or click-drag to select.
  • Use shift to take the intersection of the current selection and the new selection.
  • Click-and-drag on the current selection will drag every object in the selection.
  • Two tool bar buttons will allow the user to extend the selection down the timeline to the right, or to the left, of the currently selected source.
  • Group/Ungroup combine multiple sources into a single source. If the selection includes audio and video, two groups are made (one for audio/video).
  • Unlink allows for dissociating linked audio and video tracks.
  • Collapse arranges all sources in the current selection so that there are no gaps between them. (perhaps a leftward /rightward variant should be provided)
Edge / Frame Snapping
  • When moving sources, sources snap to the nearest frame at the clip's native frame rate (depending on zoom), or the project's current framerate if the clip does not have frames. This can be overridden by holding a modifier key. Ctrl will disable frame snapping entirely, while alt will switch to the project's native frame rate.
  • User can trim a source at any time by clicking-and-draging the trimming handles at the ends of the source widget. A source cannot be stretched beyond its actual duration (time stretching will be implemented later, as one of those evil modes). By default, trimming snaps to the clip's native frame boundaries, but this can be be over-ridden with shift/alt/control as described above with moving sources.
  • The edit points of sources are "magnetic" within a certain distance. This means it should be really easy to make one source cut directly to another, despite the default frame-snapping. Care must be taken that the snap-to-frame feature doesn't interfere with this feature: it should take priority.
Fine-Tuning of Edit Points
  • When the edit point of one source coincides with another, the clips are automatically "spliced", meaning their in/out points become linked together.
  • When two clips are spliced, the area between the two sources works as an edit-point adjuster. Essentially it adjusts the out point of the left source and the in point of the right source at the same time. A bi-directional arrow cursor <-|-> should be used to indicate the presence of the splice.
  • By default, edits can snap to the frame boundaries of either clip. The user can override this with alt/control as described above.
  • The splice can be broken by moving the clips or trimming them as usual: only the area in the center provides this feature.
  • The UI should constrain the edit point in such a way that neither source can be stretched beyond it's native duration.
  • Note this does not address the (possibly more common) scenario in which the user wants to adjust the in / out point of only one of the sources, but still keep the hard cut between them. In this case, the user first performs the trimming operation, then uses the collapse command to eliminate the bank space created.
Multi-Layer Editing
  • The user can add additional layers to the timeline. For the moment, these will merely be an organizational convenience, but later they will play a role in inputing effect operations.
  • By default, audio will be mixed, and the topmost video source will play.
    Future releases will introduce compositing support.
  • Scrubbing directly on the timeline ruler will seek to that place in the timeline at the nearest frame in the current project settings.
  • The user can use forward and back arrows to seek forward/back single frames at the current project framerate.
  • Holding down keys causes repeated seeking. Holding shift increases the seek interval to 5 frames. Holding down ctrl increases the interval to 1/2 second. holding down alt increases the interval to 5 seconds. Holding down ctrl+alt moves the play head to the next edit point.
  • If the playhead moves beyond the current scroll position, the timeline scrolls to the keep the playhead position in the center when the user releases a key.
  • Zooms should always center on the current play head position, not the scroll position. the zoom control should provide meaningful zoom levels: 1, 5, 10 frames, 1, 5, 10, seconds, 1, 5, 10 minutes.
My main concern is that I'm relying on modifier keys to control certain parameters: but I think the way I've used them is justifiable. I use them more-or-less consistently, and their function can be explained in a couple of sentences. If the defaults don't turn out to be sane, we can change them, and still use the modifiers to access the other modes. I think only user testing and feedback will really tell us what the defaults should be.

No comments: