Created
May 10, 2017 19:30
-
-
Save keithweaver/70df4922fec74ea87405b83840b45d57 to your computer and use it in GitHub Desktop.
Using OpenCV takes a mp4 video and produces a number of images.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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() |
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
nice, not working