This is the dedicated feedback thread for my GSoC 2024 Project aimed at improving the overall video sequencer UX.
You can view the first draft of features at my original proposal.
You can also check out progress over the summer at the weekly reports thread.
Project Details
Snap strips to markers (suggested by Nebulon1212)
I have implemented this suggestion and the patch has since been merged into main.
Link and Unlink Strips
I propose an additional option to “link” and “unlink” strips in the sequencer context menu. If a user links together multiple strips, selecting one strip will automatically select all other linked strips, and operations on one strip will also be applied to all other strips. Any newly imported video files will have linked strips by default.
If a user selects any strip which is already linked, there will be no option to link it with other strips and cause double-linking. Linking could have a keybind similar to joining in object mode (ctrl+J), but P is reserved for setting a preview range, so if there is an unlinking keybind it’ll have to be something else.
The visual design of linked strips is subject to feedback, but one solution could be to append a strip “linking number” to the name/source/duration of the clip identifying its link partners (which could also be color-coded). For example, if a user links an audio and video strip, they could both be associated with link 1 / L1. Then further linking will increment the link number.
Active Channels
I propose adding a new “active” property to channels which will give the user the option to explicitly select “destination” channels for operations that create new strips (such as adding or pasting). A mockup of the altered channel look may be seen below:
The mockup is subject to feedback, but the intent is to let the user click on a channel’s identifier in order to select it, similar to how modifier selection works.
The active channel property would work as follows:
- Channel 1 will be active by default
- All pasted or added strip(s) will attempt to place themselves in the active channel at the current playhead position
- Overlap mode will decide how the strips behave if there is already a strip present in a given channel at the current frame
- If strips from multiple channels were copied, or if imported media consists of multiple strips (e.g. audio/video of the same file), the pasted strips will not overlap each other, and will remain in separate channels.
- In this case, the active channel will be the destination of the lowest strip in the stack (e.g. audio strip for a file with audio + video channels), such that higher strips will attempt to place them in the next highest channels.
- Potentially: it might be useful to let the user decide which direction pasted strips will go based on the position of the mouse when pasting, similar to how the location of the mouse when cutting determines which side of a strip will be selected after the cut.
- That is, if a user has their mouse positioned anywhere above the current channel, then the pasted strip will attempt to place itself in the next free channel above. If they have their mouse positioned below the current channel, then the pasted strip will attempt to place itself in the next free channel below.
Preview Snapping Support
Currently, users can grab (G), rotate (R), and scale (S) strip bounds in the preview window. I intend to add a snapping toggle for the preview window which may function similarly to sequencer snapping but with differently defined snap points.
The below image shows the areas of the preview in which I intend to implement snapping support. Bounding boxes of a strip may be snapped to the dotted red lines corresponding to the top, bottom, left, and right render borders. The pivot point of a strip may be snapped to the dotted blue lines corresponding to the horizontal and vertical centers of the render output.
Note that the dotted lines are only meant to clearly illustrate the snap points. For an actual implementation, the drawSnapping() function in transform_snap.cc could be used to draw lines when a valid snap is found.
Although text strips’ bounding boxes are larger than they should be to benefit from these snapping changes, there are options to choose text alignment with respect to the render output, so they already benefit from snapping in a sense. I will investigate dynamically sized bounding boxes for text only if I have extra time.
Additional Tasks
If all deliverables are completed and thoroughly tested and there is still time remaining within the project, I will take on additional tasks:
- Snap Strips to Start/End Frame, Preview Range option
- Snap Strip bounds to hold offset (so that extending a clip only extends to the end of its video data and doesnt create a hold)
- Potentially rename this option to snap strip to “Content Start/End”
- Snap bounding boxes to bounding boxes in preview
- Move channels feature
- “Add channel below” feature
- Give Sequencer & Preview View Type all functionality afforded to the separate view types
- Improve pitch management of audio strips (retiming)
Changelog:
- 5/8/24 – Change active channel selection mockup to mechanism similar to modifier selection (instead of having separate buttons like mute and lock). Also clarify linking/unlinking visual design.
- 5/16/24 – Add additional goals to tackle, clarify active channels proposal further