Skip to content

Allow selection of which scenes images and video clips are made with save-images and spit-video #123

Closed

Description

@tonycpsu

Description of Problem & Solution

I've had some situations where I have a large number of video files with a similar structure where I'd like to select (or omit) a certain number of scenes from the output, either at the beginning or end of the file. These are generally Youtube downloads where the channel has a bunch of content at the beginning (title sequence) or end ("please like and subscribe!") that I'd rather not waste time saving and deleting.

It would be nice of scenedetect had a way to select these to avoid extra files being created.

Proposed Implementation:

My proposal is to add a --scenes (-S) option that takes a string in the form of a comma-separated list of array indexes or slices. These indexes and slices would be used to generate a list of array indexes for the detected scene list, and only those indexes would be output when running save-images or split-video.

For example:

scenedetect -i input.mp4 --scenes 0,-3:

would save the first scene and the last three scenes, while

scenedetect -i input.mp4 --scenes 5:-5

would omit the first five and last 5 scenes.

In the case where the scene indexes are all positive (i.e. none of them depend on knowing how long the list is) my implementation of this also short-circuits the detect-scenes process, stopping after it knows that there are no more scenes that will be kept. So -S 0 runs extremely fast, breaking out of scene detection once it gets to the first cut, and just saving the images / video from the first scene.

Knowing a priori what scenes are to be kept is a bit of a unique situation, so I don't know if this is anything anyone else would care to have, but I've already implemented it and it works for me (tm), so I'd be happy to submit a PR if there's any interest. Would just need to tidy it up and add docs.

Activity

  1. Breakthrough commented on Oct 31, 2019

    @Breakthrough
    Owner

    I still think there's value in saying "give me the first X scenes" or "give me the last X scenes", or a combination thereof. I just want to make sure the command-line syntax is correct or intuitive (I'm not sure I follow what the slice operator means in the first example?).

    I like the idea of breaking early as well, but am curious as to how you did it - feel free to post a pull request if you would like and link it to this issue.

  2. tonycpsu commented on Nov 3, 2019

    @tonycpsu
    ContributorAuthor

    I just want to make sure the command-line syntax is correct or intuitive

    Understandable. If you think that this will be a significant speedbump for users, I'm open to other suggestions on how to accomplish the same thing with a more intuitive syntax.

    (I'm not sure I follow what the slice operator means in the first example?).

    I assume your confusion results from the -3: bit. The command-line option is a comma-separated list of either integers or slices in [start[:stop[:step]]] notation, depending on whether you want to select a single scene (with an integer) or a number of them (with a slice).

    In this case,-3: translates to the Python slice object slice(-3, None, None), which means start at the third to last scene and include the rest of them from that point. Including the trailing : denotes that this is a slice and not an integer. Any unspecified stop or step arguments are assumed to be None.

    Does that clear things up?

  3. Breakthrough commented on Nov 3, 2019

    @Breakthrough
    Owner

    Yes sorry @tonycpsu, I initially misunderstood your original post. Just wanted to make sure I fully understood the idea, looks good to me though.

    Only other comment I have is it would be nice to have a single-letter argument in addition to --scenes. Thoughts on calling it --scene-range (or -r) instead, or any other names which would allow a single-letter alternative to --scenes?

    (Only because -s is already for the statsfile...)

  4. tonycpsu commented on Nov 3, 2019

    @tonycpsu
    ContributorAuthor

    I used -S for the short argument, but I can change it to -r if you think that will create confusion with -s.

  5. Breakthrough commented on Nov 9, 2019

    @Breakthrough
    Owner

    I'm not a huge fan of using capitalization to distinguish single-letter arguments, but if anyone feels strongly otherwise feel free to voice your opinion here.

    As @tonycpsu submitted the PR it uses -r which I do actually prefer (thanks again for the PR, looking forward to getting it merged soon!)

  6. added this to the v0.5.2 milestone on Nov 9, 2019
  7. modified the milestones: v0.5.2, on Jun 16, 2020
  8. modified the milestones: , on Aug 21, 2021
  9. removed this from the milestone on Feb 20, 2022
  10. Breakthrough commented on Jul 17, 2023

    @Breakthrough
    Owner

    Hopefully this use case can be covered in v0.6.2 with the use of the load-scenes command, which should work for both the split-video and save-images use case.

    Happy to reopen this in the future if anyone needs this feature or load-scenes is not sufficient for this purpose.

  11. added this to the v0.6.2 milestone on Jul 17, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions