VideoHelp Forum
+ Reply to Thread
Results 1 to 28 of 28
Thread
  1. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    I have a video which in fact seems to be or have been a powerpoint presentation.

    So it is like a slide show. there is no sound. Just these static screens displayed for various lengths of time.

    As such it is not much good to me. I would like to print out each different screen.

    I would like to make slideshow of it that I could manipulate - decide how long each one displays, have press button control over the display.

    Googling I find lots of hits most of which are online things. I want a desktop thing.

    And I googled and got directed to a few desktop things but when I tried them they just didn't seem to fit - didn't want to work with videos, wanted single photos.

    Got directed to and downloaded the old Windows Movie Maker, for instance and it failed, for me at least, I couldn't see how to turn this video into a manageable slide show.

    Can anyone help?

    p.s. I will tell you the video if you like: https://youtu.be/CfrWyPm2pKQ
    Quote Quote  
  2. Member DB83's Avatar
    Join Date
    Jul 2007
    Location
    United Kingdom
    Search Comp PM
    I really do not think ANY slide-show software allows for that. But there are several in the software section and you can but try them.


    The software typically works for a timed change of pic. You might consider creating a dvd or mp4/mkv with each pic as a chapter so you can then forward to the next one before the timer runs out. I assume that mp4/mkv will also work like that. I simply do not know.


    But there is an even simpler option (which could be combined with the above). It's called the play/pause key. So you read the pic for as long as you want to from the pause before you continue to 'play' the show. Yet that also will not allow if there is sound.
    Quote Quote  
  3. Member
    Join Date
    Jul 2007
    Location
    United States
    Search Comp PM
    The video you linked to is definitely a PowerPoint presentation recorded as a video.

    What do you mean "I would like to print out each different screen." PowerPoint presenters do that all the time. Print out each screen/slide as handouts.

    It seems you want to add videos. PowerPoint allows that: https://support.office.com/en-us/article/video-add-format-and-record-video-bb7fc99c-71...a-3ebafcd9f3ed. You'll may have to encode your video to the specific format required. If you don't have PowerPoint, OpenOffice Impress can do the same thing: https://wiki.openoffice.org/wiki/Add_Video_or_Sound_to_Presentationhttps://wiki.openoffice.org/wiki/Add_Video_or_Sound_to_Presentation
    Quote Quote  
  4. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    Yes I want to print out each screen. Keep the text in a folder with the rest of the course material. This video has been included in a correspondence course I'm doing and those screens actually represent better course material than the course itself provides.

    I said I wanted a slideshow simply because I thought if I have it as a slide show that will certainly enable printing out screens.

    I don't really want a slide show as a show - I realise, of course, that I can pause the video. And being paused I can then do a screengrab and then I can print out that. And have done. Some.

    Yes. Workarounds. I'm just querying for a 'royal road', an easy, a 'proper' or 'dedicated' way.

    How many times in the past have you constructed a way of doing things, painstakingly, only to have someone see it and say 'there's a piece of software will do that..' ?

    I don't have Powerpoint. Look like this Open Office Impress might be the way to go.

    Just was thinking maybe even Shotcut would do it. I have it. Can try.

    Quote Quote  
  5. Member DB83's Avatar
    Join Date
    Jul 2007
    Location
    United Kingdom
    Search Comp PM
    Ok. I have just realised a method by way a key press can advance from one screen to another.


    1. Use whatever method that suits you to get the individual pictures from the video
    2. Compile the pictures in to a pdf
    3. Use a pdf reader which has page-up/page down buttons such as Adobe Reader.
    Quote Quote  
  6. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    Yep, that'd be great.

    I'm still looking for an optimal way of getting the pictures from the video.

    I thought it might import to impress but it wouldn't. If I change the format from mp4 it might, though. I suppose.
    Quote Quote  
  7. Member DB83's Avatar
    Join Date
    Jul 2007
    Location
    United Kingdom
    Search Comp PM
    The simplest way I have found is a little program called APS (AutoPrintScreen). A single click of the 'Print Screen' key as the video plays grabs the screen in whatever format jpeg, BMP etc. you want and with the video played full-screen you would not have to edit the caps to remove unwanted detail.
    Last edited by DB83; 27th May 2020 at 07:31. Reason: wrong software quoted
    Quote Quote  
  8. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    Yep, that could be good by sounds of it. That reminded me about windows snipping tool - that'd do it, too.

    And I've remembered OBS. I could probably get it that way.

    Nicest way for me would be to have it - the video - all laid out in a timeline like in Shotcut and I just scroll along the line and somehow do a one click cut and save of that frame every time I find a new picture.

    Even better a piece of software that does that for me - spits out a frame every time it finds sufficiently different image. So on a normal video it would spit out every single frame. On a ten minute video of an unmoving scene, a still life, it would spit out only one frame.

    Twenty years ago I would have set to and tried to write it. Not now.
    Quote Quote  
  9. Member
    Join Date
    Jul 2007
    Location
    United States
    Search Comp PM
    Try the software/scripts I linked to this thread: https://forum.videohelp.com/showthread.php?t=397436 and let us know if it works for you.
    Quote Quote  
  10. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    Try the software/scripts I linked to this thread: https://forum.videohelp.com/showthread.php?t=397436 and let us know if it works for you.
    Thanks for that. Very interesting and entertaining, both. I'll see if I can get my head round the technicalities and use it all....

    Quote Quote  
  11. Most media players have a snapshot tool that will save an image file with each key press. For example, VLC does it with Shift+s.
    Quote Quote  
  12. Member DB83's Avatar
    Join Date
    Jul 2007
    Location
    United Kingdom
    Search Comp PM
    A very simple tool to extract still images from a video is called Image Grabber. It works by grabbing a user-defined number of images so you would have to do some simple maths if for instance you wanted one image every second. Normally those images are joined in to a frame but they can be left as singles.


    I would still do it manually since in that sample video there are many frames that you would not really want but just the final one in any sequence. And for that same reason you would end up grabbing almost every single frame if a utility automatically detected differences.
    Quote Quote  
  13. This struck me as an interesting challenge. Here's what I came up with in AviSynth:

    Code:
    GScript("""
      function DeleteFrames(clip c, string condition) {
      # DeleteFrames (Gavino, 16 Nov 2011)
      # A generic function that will delete all frames satisfying an arbitrary user-defined condition.
      # The condition can use any of the Avisynth run-time functions such as AverageLuma(), etc, 
      # and/or the variable 'current_frame'.
      # (Note - Since the condition is evaluated inside the function,
      # any variables used (except current_frame) must be global.)
      # Example use (delete duplicate frames):
      #   DeleteFrames("YDifferenceFromPrevious < 0.1 && current_frame > 0")
    
        c    
        fc = FrameCount()
        res = BlankClip(c, length=0)
        current_frame = 0
        
        while (current_frame < fc) {
          while (Eval(condition) && current_frame < fc) {
            current_frame = current_frame+1
          }
          if (current_frame < fc) { # not at end
            start = current_frame # start of wanted section
            while (!Eval(condition) && current_frame < fc) {
              current_frame = current_frame+1
            }
            res = res + Trim(start, start-current_frame)
          }
        }
    
        return res
      }
    """)
    
    
    LSmashVideoSource("D:\Youtube-dl\Accounting.mp4") 
    SelectEvery(10)
    last+Trim(0,2)
    
    DeleteFrames(last, "YDifferenceFromPrevious() > 0.01") # keep only strings of identical frames
    DeleteFrames(last, "YDifferenceToNext() < 0.7") # keep only 1 of each string of identical frames
    
    AssumeFPS(0.2) # 5 seconds per frame
    The result is 42 unique frames.
    Image Attached Files
    Quote Quote  
  14. Member DB83's Avatar
    Join Date
    Jul 2007
    Location
    United Kingdom
    Search Comp PM
    Nice one jagabo. I kinda guessed you would rise to the challenge


    Does not appear to have grabbed the whole vid >> my playback stopped at #35 from #39. But I guess with some tweaking it can be more accurate.


    One other thing. With my not-so-up-to-date version of vlc the images 'stuck' at #2 whereas Windows Media Player played it through (strange one that)
    Quote Quote  
  15. A lot of players have problems with playback of sub 1 fps video. Try opening the video in an editor like VirtualDub. The last frame should be the "Thank You" message. Here's the video as 42 separate PNG images (exported from VirtualDub).
    Image Attached Files
    Quote Quote  
  16. Member DB83's Avatar
    Join Date
    Jul 2007
    Location
    United Kingdom
    Search Comp PM
    Ah !


    I did suggest to the OP to create a pdf from images. But even that is not really necessary as one could simply view a folder and Picture Viewer has the required navigation. A pdf just makes it more compact.
    Quote Quote  
  17. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    That's fairly wonderful, jagabo, thanks a lot. I'm glad you took an interest. You've done the whole job and given us a tool for what - reverse engineering powerpoint 'videoed' presentations back to individual slides?

    How was the 'exported from Virtual Dub' ? That's something it does, export individual frames? You put the Avisynth file into Virtual Dub and then it put out the individual slides?
    Quote Quote  
  18. Originally Posted by abrogard View Post
    You've done the whole job and given us a tool for what - reverse engineering powerpoint 'videoed' presentations back to individual slides?
    No. The original Powerpoint presentation was a static background image with a bunch of objects animated and overlaid onto it. After each animated sequence the image was held static for several seconds. I took advantage of that property of the video to remove all the animated sequences, then convert the remaining still sequences to a single frame each. You are not left with all the individual assets of the original Powerpoint project. And if some other video doesn't have similar animation/still properties it will not be "extracted" properly.

    Originally Posted by abrogard View Post
    How was the 'exported from Virtual Dub' ? That's something it does, export individual frames? You put the Avisynth file into Virtual Dub and then it put out the individual slides?
    You can either open a video or AVS script in VirtualDub (File -> Open Video File...) and select File -> Export -> Image Sequence... Each frame will be exported to the chosen image type (JPG, PNG, BMP, TGA).
    Quote Quote  
  19. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    No. The original Powerpoint presentation was a static background image with a bunch of objects animated and overlaid onto it. After each animated sequence the image was held static for several seconds. I took advantage of that property of the video to remove all the animated sequences, then convert the remaining still sequences to a single frame each. You are not left with all the individual assets of the original Powerpoint project. And if some other video doesn't have similar animation/still properties it will not be "extracted" properly.
    Ah, okay. I had completely the wrong idea. Too bad. Still your solution works for me. I'm happy about that. And thanks for the tip about VDub. I'll remember that. ( I hope ).
    Quote Quote  
  20. quick and dirty
    play the video in VLC
    Pause the video for the still, Grab stills of the video from the video menu. (snapshot)
    VLC will grab still of the full size of the video, regardless of the player size, to your pictures folder.

    go to W movie maker
    Add said stills
    export
    job done
    Quote Quote  
  21. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    Yep, that's good, but the point of my 'lazy' approach was to find a way that avoided stopping and starting a video stream some 40 times.
    Quote Quote  
  22. Member
    Join Date
    May 2020
    Location
    Western Massachusetts
    Search PM
    You can use pyscenedetect for this. It's a tool that uses machine learning to automatically detect scene changes in a video.

    I experimented a little bit with your video and mostly have it working. I downloaded it to my machine at c:\tmp\video\accounting-systems.mp4 and then ran the following to execute pyscenedetect under Docker (you'll need Docker installed):

    Code:
    docker run --volume "c:/tmp/video:/opt" handflucht/pyscenedetect --input /opt/accounting-systems.mp4 --output /opt detect-content --threshold 3 list-scenes save-images
    It output a bunch of images that mostly correspond to slide changes:

    https://mega.nz/folder/pGphzDKA#00pf35Kzd_qHhuup9nuL9g

    If you want to play with my pyscenedetect command, you can try adjusting the threshold up or down. A lower number will be more sensitive (consider more changes to be different scenes), and a higher number will be less sensitive.
    Quote Quote  
  23. Member
    Join Date
    Jul 2007
    Location
    United States
    Search Comp PM
    Thank you for taking the time to test and help out! This has the potential to be huge for a lot of members!
    Quote Quote  
  24. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    If you want to play with my pyscenedetect command, you can try adjusting the threshold up or down. A lower number will be more sensitive (consider more changes to be different scenes), and a higher number will be less sensitive.
    thanks. I'll do that.
    Quote Quote  
  25. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    I installed Anaconda. Thought it was supposed to have included everything you might need normally but:


    Had a cython error when I tried to install. Realised maybe cython wasn't installed. Installed it.

    Then got a numpy error. Installed it.

    Then got a pip message. Upgraded it.

    Now got it all done I think:

    Installed c:\python\lib\site-packages\click-7.1.2-py3.6.egg
    Searching for numpy==1.18.4
    Best match: numpy 1.18.4
    Adding numpy 1.18.4 to easy-install.pth file
    Installing f2py-script.py script to C:\Python\Scripts
    Installing f2py.exe script to C:\Python\Scripts

    Using c:\python\lib\site-packages
    Finished processing dependencies for scenedetect==0.5.2
    PS C:\pyscene>



    edit: No good. It wouldn't run. Needed opencv I think but I couldn't install a version didn't give an error about not compatible with my installation.

    Given up.
    Last edited by abrogard; 28th May 2020 at 19:27.
    Quote Quote  
  26. Member
    Join Date
    May 2020
    Location
    Western Massachusetts
    Search PM
    I've never installed pyscenedetect directly. I just run it from the Docker image. If you install Docker, you can run my exact command above from any system.
    Quote Quote  
  27. Member
    Join Date
    Nov 2002
    Location
    Australia
    Search Comp PM
    Okay, I tried that. Downloaded and installed and all seemed alright. But it (docker) won't run: 'cannot enable Hyper-V' it says.

    Quote Quote  
  28. How about using Vapoursynth.

    I made a Remove_frames function that could be tweaked depending on video.
    This gave me video clip with 40 unique frames from that slideshow video. Parts with transitions or redundant parts were removed to just single static frames.
    Code:
    import vapoursynth as vs
    from vapoursynth import core
    
    source_path=r'F:/Accounting Information Systems An Overview - YouTube.mp4'
    clip = core.ffms2.Source(source_path) 
    
    class Remove_frames:
        def __init__(self, diff_tolerance=0.00005, sequence=5):
            self.diff_tolerance = diff_tolerance
            #sequence is number of frames in a row to be even considered as a slide
            self.sequence = sequence
            self.count = 0
            self.change = False
            self.to_delete = []
    
        def remove_frames(self, clip):
            self.clip = clip
            self.value_next = self.clip.get_frame(0).props.PlaneStatsAverage
            print('analyzing ...')
            for n in range(self.clip.num_frames-1):
                self.compare_neighbors(n)
            print('done')
            self.to_delete.pop(0) #first frame is taken out from list to be deleted
            return self.clip.std.DeleteFrames(self.to_delete)
    
        def compare_neighbors(self, n):
            value  = self.value_next
            self.value_next = self.clip.get_frame(n+1).props.PlaneStatsAverage     
            diff = abs(value - self.value_next)
    
            if diff < self.diff_tolerance and self.count < self.sequence:
                self.to_delete.append(n)
                self.count += 1
    
            elif diff < self.diff_tolerance and self.count == self.sequence:
                self.count = 0 
                if self.change:
                    pass#print(f'frame {n} is KEPT')  #frame is not deleted
                else:
                    self.to_delete.append(n)
                self.change = False
    
            else:
                self.to_delete.append(n)
                self.change = True
                self.count = 0 
     
        def remove_duplicates(self, clip):
            value_next = clip.get_frame(0).props.PlaneStatsAverage
            print('analyzing dups ...')
            for n in range(clip.num_frames-1):
                value  = value_next
                value_next = clip.get_frame(n+1).props.PlaneStatsAverage
                diff = abs(value - value_next)
                if diff < self.diff_tolerance:
                    self.to_delete.append(n)
            print('done')
            return clip.std.DeleteFrames(self.to_delete)
    
            
    
    clip  = clip.std.SelectEvery(5, 0).std.PlaneStats() 
    
    #just keep a frame only after frame changes and it is constant in a define number of sequence, other same frames are ignored
    remove = Remove_frames(diff_tolerance=0.00005, sequence=5)   
    clip = remove.remove_frames(clip)
    
    #second pass, remove just duplicates (some duplicates leak out from above)
    remove = Remove_frames(diff_tolerance=0.0005)   
    clip = remove.remove_duplicates(clip)
    
    clip.set_output()
    You can add this code to save each frame from that resulting video as a PNG, so you'd get 40 png images:
    Code:
    #YUV to RGB for ImageMagick Writer
    rgb_clip = core.resize.Point(clip, format = vs.RGB24, matrix_in_s = '709')
    
    #setting rgb clip for ImageMagick Writer
    rgb_clip = rgb_clip.imwri.Write(imgformat='PNG', filename='presentation_%02d.png', firstnum=1)
    
    #Writing images to hardisk by requesting frames
    for frame in range(rgb_clip.num_frames):
        rgb_clip.get_frame(frame)
    if you want to duplicate frames at the end, say one frame to about 30 frames or so for playback, you can do:
    Code:
    for _ in range(5):
        clip = clip.std.DuplicateFrames(list(range(clip.num_frames)))
    clip.set_output()
    Last edited by _Al_; 31st May 2020 at 20:11.
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!