VSE Retiming Functionality #112343
Labels
No Label
Interest
Alembic
Interest
Animation & Rigging
Interest
Asset Browser
Interest
Asset Browser Project Overview
Interest
Audio
Interest
Automated Testing
Interest
Blender Asset Bundle
Interest
BlendFile
Interest
Collada
Interest
Compatibility
Interest
Compositing
Interest
Core
Interest
Cycles
Interest
Dependency Graph
Interest
Development Management
Interest
EEVEE
Interest
EEVEE & Viewport
Interest
Freestyle
Interest
Geometry Nodes
Interest
Grease Pencil
Interest
ID Management
Interest
Images & Movies
Interest
Import Export
Interest
Line Art
Interest
Masking
Interest
Metal
Interest
Modeling
Interest
Modifiers
Interest
Motion Tracking
Interest
Nodes & Physics
Interest
OpenGL
Interest
Overlay
Interest
Overrides
Interest
Performance
Interest
Physics
Interest
Pipeline, Assets & IO
Interest
Platforms, Builds & Tests
Interest
Python API
Interest
Render & Cycles
Interest
Render Pipeline
Interest
Sculpt, Paint & Texture
Interest
Text Editor
Interest
Translations
Interest
Triaging
Interest
Undo
Interest
USD
Interest
User Interface
Interest
UV Editing
Interest
VFX & Video
Interest
Video Sequencer
Interest
Virtual Reality
Interest
Vulkan
Interest
Wayland
Interest
Workbench
Interest: X11
Legacy
Blender 2.8 Project
Legacy
Milestone 1: Basic, Local Asset Browser
Legacy
OpenGL Error
Meta
Good First Issue
Meta
Papercut
Meta
Retrospective
Meta
Security
Module
Animation & Rigging
Module
Core
Module
Development Management
Module
EEVEE & Viewport
Module
Grease Pencil
Module
Modeling
Module
Nodes & Physics
Module
Pipeline, Assets & IO
Module
Platforms, Builds & Tests
Module
Python API
Module
Render & Cycles
Module
Sculpt, Paint & Texture
Module
Triaging
Module
User Interface
Module
VFX & Video
Platform
FreeBSD
Platform
Linux
Platform
macOS
Platform
Windows
Priority
High
Priority
Low
Priority
Normal
Priority
Unbreak Now!
Status
Archived
Status
Confirmed
Status
Duplicate
Status
Needs Info from Developers
Status
Needs Information from User
Status
Needs Triage
Status
Resolved
Type
Bug
Type
Design
Type
Known Issue
Type
Patch
Type
Report
Type
To Do
No Milestone
No project
No Assignees
5 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: blender/blender#112343
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This design describes the VSE strip retiming functionality. The goal of the feature set is to allow intuitive and flexible retiming of video, audio, scene and meta strips.
It’s possible to adjust the “speed” of one or multiple strips in a few ways. In the context of the Sequencer editor, in timeline view:
Here is greyscale wireframe of how retiming keys relate to Sequencer strips.
Is tool being removed for in favor of operator?
The tool, as it currently works, is being removed. The behavior described in in this design is closer to what you would expect from a mode. A tool that allows retiming a strip by resizing its ends can be reintroduced later.
There are several things in this design which seems to me to break UX consistency of Blender:
When changing strip properties, it is done in the Sidebar.
Is it like an overlay/display switch, but with interactivity included? Should it only work for the selected strips or for all strips? Do you need to switch it off again? If they shouldn't be switched off again, working with very small strips and accidentally moving keys instead of strip or handle will become a common annoyance. Or is this actually modal editing, which normally is either initiated by selecting a tool or in modes ex. Object/Edit etc. mode?
This seems to be very non-Blender-ish concept, changing editing mode via the last selection? This is bound to confuse users, and it basically means that you can't click and hold to drag ex. a key around, like you normally can with keys, but instead you'll have to click twice on a key in order to move a key. So half of the time, going between editing modes, users will think that selecting is unresponsive and failing. This is going to lead to a lot of frustrations.
Also, adding the displaying of keys to the bottom of the strip, will make it collide with trim numbers, and in the case of the first channel, collide with the markers area, as mentioned here: #109044 (comment) and here: #109044 (comment)
Speed it not a value. It can be described more as a function. An interesting way to represent a strip wold with an f-curve widget, but that wold come with its own challenges, since a strip can be trimmed as well and the time mapping would still not be obvious.
It's not exactly modal editing, although it wold be something worth exploring when looking into future, more complex functionality to be attached to strips in the timeline itself.
The concept of "mode switching" based on last selection is a bit obscure but not new in Blender (weight painting/bone selection).
From the issues you reported I believe you have been testing this, so I'd like to hear if you have suggestions on how the interaction could be improved.
About the issues themselves, they are valid, and value labels should not overlap anywhere.
I wonder what the thoughts have been behind this process. Originally, the Retime function was implemented as a tool and widget based solution completely independent of the current keying systems. Though a lot of the functionality mirrors key functionality. Visually, it was implemented as markers. Then menus were introduced and exposed in the main menus and now the tool functionality is removed and several solutions breaking intuitiveness and UX is introduced.
If you're asking me, the speed value should just have been a keyable value working on top of the display frame value, and it should have been exposed on the strips as any other keyable value in the VSE. Or in other words a working visual solution for all keyable values should have been found(look at the NLA). And then implement a keyframe editor tool to display and interact with those keys. If you both want a one speed arbitrary value and a keyframeable solution, users should be able to switch between them in the Strip properties sidebar enum/radio button, so only one of them had power over the strip.
But it doesn't matter what I think. In the current situation, ISS has already proved that the hard part of proper retiming can and is done. So, I would really, really recommend, that all of you to sit down with the UI team and find a durable and intuitive working solution, before more time is wasted on implementing yet another less than optimal solution.
On a different note:
If you want to see the resulting frame drawn as f-curve on the strip:
https://archive.blender.org/developer/file/10365/10365519/0001-1578.mp4
https://archive.blender.org/developer/differential/0012/0012386/index.html
Thanks for the feedback. The current design is being tested with Pablo and others at Blender Studio. While the current solution is relatively simple and limited to managing "speed", the ability to display and animate other attributes (as you suggest) is being kept in mind.
I just started testing the current implementation. Here are various notes. Would be great to talk more in detail about these.
Retiming Toggle
Ctrl R
is not a good shortcut choice imo. It is a very established and frequently used shortcut for Refreshing. It's fair to say that Blender shouldn't need this shortcut,for now it is still absolutely required. Once it is made obsolete we can think about replacing/removing it.Transforming Keys
Moving keys does not move all keys further to the right. But that is the more desireable default behavior for the majority of the time when working with retiming because otherwise you are editing more than just the timing of the key you've selected.
I could see multiple ways to implement this
G
to do the behavior I described above and another shortcut and operator to do the current behavior.Modifier Key + Select
to select the key and all keys to the right before editingRetiming Menu
Alt A
Speed Transitions
Retiming Overlay
Scalable design
This should be obsolete already. If there are situation where Ctrl+R is still required, they should be reported and fixed.
The suggested name should be "Toggle Retiming Keys"
As long as there is a keyboard shortcut, having logical nesting does not seem to be a problem. The context for that command is "Retiming", and that's what we have as top level menu.
The current design follows all the other keyframe editors. Ctrl+Click (left or right of the playhead) should be the selector for all keys in a strip. I understand the desire for a more bespoke behavior, but I'd fully make sure the "default" behavior is implemented first. Having an easy way to translate proportionally all keys is a very valid feature, especially when working with large strips.
There are thought about this, but no published design. It's on my todo list.
Just to be clear, I think the menu is well done. The issue I wanted to get at is that the feedback on why the keys are greyed out is only availible in this nested menu. The toggle itself is too hidden and is guaranteed to lead to confusion and unnecessary troubleshooting.
Having a prominent toggle on the strip or prominently in the sidebar helps in identifying the state of the strip and presents a button to change it. Especially if the shortcut is pressed by accident (or out of old Refreshing habit) this will help a lot.
Some more issues I've noticed.
I -> Set Retiming Key
is creating a key at the playhead position.But
I -> Set Freeze Frame
is created at each selected key.The naming is not making this clear and there are no Tooltips to explain this behavior.
Perhaps the better solution is even to make both operators create a key at the playhead position. Otherwise you first have to create a retiming key, select it and then set a freeze frame.
Also when using
Set Freeze Frame
it inserts a new key with a predetermined offset.But it fails to offset all keys to the right, which results in changing the timing of the segment next to it, and even shrinks the predetermined offset if there isn't enough space for the freeze frame key.
This is too destructive with no easy way to fix the altered timing afterwards.
Setting a Freeze Frame must not alter the timing of any segments to the right of it.
I am not sure if I can realistically fix remaining issues. At least not easily or quickly.
The set speed operator is operating on whole strip if there are no keys inside of strip. If there are, it should operate on selected keys only. Perhaps this functionality should have been split in 2 different operators. If so, I am not sure how I can implement operator to set strip speed with keys inside. I can propose to delete existing keys and make speed uniform.
Perhaps it would be best to not include selection operators in retiming menu, but not all select operators support selecting retiming data. So I can gray out these in select menu.
That is bug - it should work will make fix separate to UI changes
This behavior depends on context - normally freeze frame needs start position, so the idea was, that in retiming editing context if you want to create freeze frame, you would select key and use this operator, but that is probably not great workflow.
I will match behavior to inserting normal key. For transitions, it has to operate on keys though.
Seems reasonable, will work on that, but so far the solution seems to be quite complex.
In meanwhile, I have submitted PR #113211 for some issues mentioned here
Some more notes from testing:
R
doesn't work unless the value field is clicked and accepted. Just pressing enter should lead to the same result but doesn't.I
shortcut menu is impossible to find in the UI. The menu should be exposed in the retiming menu of the header so the shortcut is discoverable.And I'd like to emphasize this:
A solution to select all retiming keys to the right of the selected keys should be the highest priority. Soft Cut or shortened strips can make box selecting keys impossible and very tedious. Large strips are time consuming to retime too. The current workflow of manually selecting all keys to the right is very time consuming and error prone.
I'm not sure what the priorities are atm but imo the current UX for retiming keys must be improved for the next release.
Looking at the UI
Old:
New:
If the below-mentioned changes in the Retiming menu was implemented, it could look like this:
Toggle Retiming Keys > Edit Keys: The word toggle is redundant since there is a checkbox, Retime is redundant since the entire submenu is called Retime, and since enabling this operator will allow to edit keys, that is properly a better wording. Tooltip needs to be updated too(as keys are visible all the time, "show" is not a good word). Could also be flipped in functionality, and called "Lock Keys". Move the the top of the menu, as it is super important.
Add Retiming Key > Insert Key: Retiming is redundant, since the menu is called Retime. Insert is used elsewhere for keys(ex. press I in the 3d view)
Add Transition > Interpolate Key - which indicates that a key needs to be selected. Benzier could maybe be added?
Freeze Frame Operator: Unclear that it'll convert selected key to freeze-frame, and when no keys are selected it'll insert a Freeze Frame key at Playhead position. This double behavior can lead to confusion. Freeze Frame can't have transitions? Seems odd?
Delete Retiming Keys > Delete Keys: Tooltip is wrong.
Reset Retiming > Reset: Tooltip changed to: Delete all retiming keys.
Set Speed: Seems to be applied on top of the retiming keys and therefore unrelated to retiming, so maybe it would be better if it is exposed in the Strip Sidebar > Video > Speed. Oh, now it seems it is changing the value of the last key, when no keys are selected, and selecting the first key only, the value mirrors the start value of the last key, but it doesn't update the value on the strip? This function seems very confusing and maybe bugged? If kept: Set Speed in the pop-up header is redundant, as the float widget already is called Speed:
(Renaming needs to be applied to the "I" menu too)
Sidebar:
Maybe the properties of the active key should be exposed in the sidebar? So the interpolation type, and the various values can be edited there? (Instead of the very confusing Set Speed operator)
Drawing:
Info:
When trying to insert a key, and no strip is selected or playhead isn't overlapping, there needs to be information about this in the statusbar.
Some code for the above-mentioned changes:
Some more usability issues I noticed:
Last keyframe is setting the speed
This is a big issue when retiming. It's always needed to zoom out, select the keyframe at the end of a retiming segment, and then use
R
to retime the segment, and then zoom back in again.A huge problem on any strip that is relatively large.
To avoid unnecessary navigating, the Start Keyframe should be selected to set the speed of the segment.
This of course will end up very confusing because the end keyframe would still be dragged to tweak the retiming speed.
Maybe the best course is to use the planned box visualization of keyframes to show and select and operate on whole retiming segments.
Segment timings are not propagated when using 'Set Speed'
I already mentioned before that preserving the speed of retiming segments that are ahead, when adjusting a single keyframes, is a high priority.
A suggested workaround was to box select or otherwise select all keyframes that are after of the keyframe that is going to be tweaked.
The case where this logic will not work is when using 'Set Speed' on a single keyframe. The changes will not propagate to the keyframe right after that one, resulting in unintentionally changing the speed of the retiming segment after it.
Also a side note: Perhaps it's best to transition the feedback and testing notes to devtalk.
It's better to have a discussion in that space and involve more from the community.
I have pushed 2 features - Ctrl+click will select all remaining keys and added option for set speed to keep retiming and change strip length instead. Now when I write this, I am thinking, that I could have prevented strip to get longer, but that probably isn't super great idea.
i agree with devtalk thread, will create one, and link it here. There we can discuss retiming preservation when translating keys - it's not hard to implement tecnically, but may need few iterations to get it right.
@iss That works yes. Although I didn't get the changes of
5092fe60e6
into an existing right click select keymap.Ctrl RMB
does nothing in that case.I have created the topic on devtalk - https://devtalk.blender.org/t/vse-strip-retiming-feedback/32581