GSoC 2024: Sprucing up the Video Sequencer (Feedback)

Seems like preview snapping has been merged to main, thanks for all the feedback :slight_smile: will see about adding more features to snapping in the near future.

Now Iā€™d like to get some preliminary feedback about linked strips design before submitting the PR.

Questions:

  1. Throughout Blender, the term ā€œlinkedā€ refers to all items that are adjacent or part of the same ā€œobjectā€ (vertices from the same UV island, grease pencil points from same curve, etc). Select Linked and Select Pick Linked operators already exist for the sequencer, which select all strips that directly border one another on the same channel.
    Iā€™m proposing to rename these operators to ā€œSelect Adjacentā€ and ā€œSelect Pick Adjacentā€ instead. My rationale is that bordering strips arenā€™t really ā€œlinkedā€ in the same sense that GP points or UV verts are, since strips are no longer ā€œlinkedā€ in this sense as soon as you move one of them.
    Would people be opposed to this change? If so, we could see about calling GSoC linked strips ā€œbound stripsā€ or something else.
  2. What sounds best for a default keybind to link/unlink strips? Or is calling from the context menu fine enough, no need for a keybind?
  3. Technical UI question for someone like @fsiddi or @pablovazquez ā€“ Where should the link icon be situated on the strip? Before name/source/duration? After? Text labels are stored in a simple text buffer, but if Iā€™m drawing an icon Iā€™ll need a uiBlock and uiLayout to pass to UI_block_draw (unless thereā€™s a simpler method), so if the icon needs to be to the right of the text thatā€™s there right now, it might be good to think about drawing all the text in a uiBlock. For now Iā€™ll indicate the linked property with an ā€œLā€ character in the text overlays, but will make changes as necessary if I get a nice mockup :slight_smile:
2 Likes

(note that all my replies are as someone who is contributing to VSE, but really knows nothing about VSE, and especially nothing about the history of it, so YMMV)

  1. The rename of current ā€œlinkedā€ to ā€œadjacentā€ sounds fine to me.
  2. Maybe start without a specific key binding (afterall, I expect 90% of use cases for linked strips to be video+audio tracks that are created when adding a movie; and for that case they should get linked automatically). But, somehow make sure that a user can set up their own shortcut key for the operator perhaps.
  3. Not sure if ā€œUIā€ things would work there; all the text labels on the strips do not go through ā€œregularā€ UI system but rather through some sort of 2D UI label cache thing. That said, strips titles do have icons right now, that are drawn manually ā€“ specifically, for ā€œmissing mediaā€ strips. Create an image or a movie, and then delete their source data file, and you should get it: https://developer.blender.org/docs/release_notes/4.2/images/VSEMissingMedia.png Iā€™d go with ā€œlinkedā€ icon being in front of the label, similar to how ā€œmissingā€ icons are.
2 Likes

Just want to mention that Select Linked operator exists for other editors that have timeline, so it will have to be much bigger change. And while changing name is easy, operators are bpy.____.select_linked and those have to be changed too. Because if you have select_linked operator which selects adjacent, and select_something (because linked is taken) operator that selects linked its gonna get real confusing. Probably too much of a breaking change. I think its worth it personally, but will need lot of people to sign. Its gonna be painful but worth it in long run to have more clear UX and less confusing names.

2 Likes

While ā€œlinkā€ is the NLE industry standard word for binding clips together, itā€™s also used all over Blender with different meanings, and trying to reserve it for binding VSE strips, with renaming and versioning everywhere else may too much of an uphill battle.

Looking at 3D objects, theyā€™re ā€œparentedā€, the selected objects to the active selected object. Moving the parent, the children will follow, but moving the children will not move the parent.

This concept is implemented in the VSEQF by SNU:

parenting
Ctrl+P for Parenting
Alt+P for Clear Parent

3 Likes

Currently, is there a ā€œlinkā€ indicator of input strips of effect strips:

Ah, right, totally forgot about these, will definitely do this! Exact placement (before or after missing media icons?) can be the subject of an intensely heated debate later :slight_smile:

The operators Iā€™m talking about are bpy.ops.sequencer.select_linked() and bpy.ops.sequencer.select_linked_pick(), their implementations are restricted to VSE code.
Iā€™m not proposing to rename any of the other ā€œselect linkedā€ operators; they make sense as-is IMO:

  • Keyframes that are part of the same F-Curve remain part of the same F-Curve even when moving them around, so it makes sense to call these ā€œlinkedā€
    • Same for grease pencil points that are part of the same curve, UV verts part of the same island, bones part of the same chain, etcā€¦
  • Two objects with the same material/mesh data/particle system etc. mean that changing the data on one changes for all of them, so it makes sense to call these ā€œlinkedā€

But strips that are next to each other arenā€™t linked in any of these senses.
Just proposing to rename the VSE-specific operators to .select_adjacent() and select_adjacent_pick().

I think the term ā€œparented stripsā€ would suggest a one-way connotation when in reality moving any linked strip will move all of them (similar to linked object data). In this sense I think the GSoC ā€œlinked stripsā€ adheres more to the concept of ā€œlinkingā€ in a general Blender sense than the previous naming (ā€œlinkedā€ as ā€œstrips next to each other on the same channelā€).

No, but Iā€™ll see how it looks in combination with the link iconā€¦ seems like it would help a lot in the uncommon case that you have linked strips that arenā€™t just on top of each other (A/V)

1 Like

There is bpy.ops.action.select_linked() bpy.ops.nla.select_linked() and etc. For each editor. Each has its own operator. And they all do same thing. And you cant just rename one imo. Cant have same thing called different names in different editors. And renaming the bpy.ops name itself is breaking change (although welcomed by me)

I donā€™t think thereā€™s a nla.select_linked, though, right? Unless Iā€™m missing something. Canā€™t find that one in the operator search or any menus. Stuff like action.select_linked makes sense in that keyframes that are part of the same f-curve remain part of the same f-curve even when you move them aroundā€¦ As soon as you move strips so that theyre no longer directly bordering each other, you cant use the sequencer.select_linked or sequencer.select_linked_pick ops anymore, which doesnā€™t make too much senseā€¦ how are they ā€œlinkedā€ then? :slight_smile:

Versioning a change to the operator name is something Iā€™m totally unfamiliar with so others could chime in on this point. If it is a breaking change that canā€™t be versioned we could see about just keeping the op name the same while changing the user-facing name. In my implementation so far thereā€™s no separate operator for selecting linked strips, (you just select a strip thatā€™s linked and itā€™ll auto-select all other linked strips), so there shouldnā€™t be too much confusion for scripters.

1 Like

Well, same argument can be made about VSE if weā€™re stretching definitions and we can say all strips are linked to the channel same way keyframes are to fcurve. But matter of fact is on user side they all do same thing - select keys/strips on a horizontal line. I donā€™t think user is looking into this much deeper than that. I agree that current term ā€œSelect Linkedā€ is misleading for both usecases, because keyframes arenā€™t linked to the fcurve, theyā€™re inside it, its completely different. Thatā€™s why Iā€™m saying I would like to see this changed to adjacent everywhere, but anim-rigging module would have to be consulted about that.

1 Like

I would also say, that in Blender, for this feature word ā€œparentedā€ would be more appropriate, than ā€œlinkedā€.

In standard video terminology, a sound clip is not ā€œparentedā€ to the associated video clip. They are linked, or not linked.

2 Likes

In standard Blender terminology, objects that influence the transform of others are parented not linked.
Linked means something else.
So in this case it makes sense to use the terminology that is already used elsewhere in Blender even if it is not what is used in other programs.

But parenting is hierarchical tho, one is influencing other. In this case both are influencing each other. It feels more linked

6 Likes

Video and sound clips arenā€™t ā€˜objects in Blenderā€™. Theyā€™re footage elements on a timeline.

1 Like

Yeah, but linked has a specific meaning. I think it requires a new term. Like ā€œgroupedā€.

joined
attached
merged

How about ā€œconnectedā€, or ā€entangledā€?

When considering different names, the term would show up in menus as an imperative verb (e.g. ā€œlink/unlinkā€) and not a participle (ā€œlinkedā€), so whatever sounds best as a verb in the present tense would be great.

  1. Join/Separate
  2. Attach/Detach
  3. Merge/Unmerge
  4. Connect/Disconnect
  5. Entangle/Disentangle
  6. Group/Ungroup
  7. Bind/Unbind

I like 1 since ā€œlinking stripsā€ in the industry NLE sense is a little like joining together objects in Blender ā€“ when you move one part of the object the other parts move with.
I also like 2, 4, and 7, let me know what you all think

3 Likes

Entangled is exactly spot-on in terms of meaning, but might be a little obscure

After some conversations with Dalai, Pablo and Sergey, there is consensus that ā€œConnect/Disconnectā€ is the preferred naming. Itā€™s important to keep the meaning of ā€œlinkingā€ consistent in Blender, more than aligning with the standard terminology used by other video editing software in this case.

15 Likes