Skip to content

Instantly share code, notes, and snippets.

@keithweaver
Created May 10, 2017 19:30
Show Gist options
  • Save keithweaver/70df4922fec74ea87405b83840b45d57 to your computer and use it in GitHub Desktop.
Save keithweaver/70df4922fec74ea87405b83840b45d57 to your computer and use it in GitHub Desktop.
Using OpenCV takes a mp4 video and produces a number of images.
'''
Using OpenCV takes a mp4 video and produces a number of images.
Requirements
----
You require OpenCV 3.2 to be installed.
Run
----
Open the main.py and edit the path to the video. Then run:
$ python main.py
Which will produce a folder called data with the images. There will be 2000+ images for example.mp4.
'''
import cv2
import numpy as np
import os
# Playing video from file:
cap = cv2.VideoCapture('example.mp4')
try:
if not os.path.exists('data'):
os.makedirs('data')
except OSError:
print ('Error: Creating directory of data')
currentFrame = 0
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Saves image of the current frame in jpg file
name = './data/frame' + str(currentFrame) + '.jpg'
print ('Creating...' + name)
cv2.imwrite(name, frame)
# To stop duplicate images
currentFrame += 1
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
@927drish
Copy link

what algorithm to use to select best frame?

@aiwithshekhar
Copy link

nice, not working

@oofmaloo
Copy link

oofmaloo commented May 21, 2023

In case anyone wants to skip frames / and use youtube clips

import cv2
import numpy as np
import os
from cap_from_youtube import cap_from_youtube

# Playing video from file:
youtube_url = 'https://www.youtube.com/watch?v=6j1Oj5N7kwE'
cap = cap_from_youtube(youtube_url, 'best')

try:
    if not os.path.exists('data'):
        os.makedirs('data')
except OSError:
    print ('Error: Creating directory of data')

fps = 25
seconds_to_skip = 30
# fps * seconds_to_skip

# start frame is
currentFrame = 8500
# if you want a start frame use this, otherwise set currentFrame to 0 and comment line below
cap.set(cv2.CAP_PROP_POS_FRAMES, currentFrame)
while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    if ret:
        print ('Creating frame...' + str(currentFrame))
        cv2.imwrite('./data/frame{:d}.jpg'.format(currentFrame), frame)
        currentFrame += (fps * seconds_to_skip) # i.e. at 30 fps, this advances one second
        cap.set(cv2.CAP_PROP_POS_FRAMES, currentFrame)
    else:
        cap.release()
        break

# When everything done, release the capture
cv2.destroyAllWindows()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment