I have written some python code for extracting two frames from a video file using OpenCV. I have tested my code and it works for one video file.
However, I have a folder with hundreds of video files and I would like to extract two frames from all the videos in that folder. Is there a method of doing this for all the files in a folder? Perhaps using the os module or something similar?
My code is below for reference:
JavaScript
x
38
38
1
import cv2
2
import numpy as np
3
import os
4
5
# Playing video from file:
6
cap = cv2.VideoCapture('/Users/batuhanyildirim/Desktop/UCF-
7
101/BenchPress/v_benchPress_g25_c07_mp4.m4v')
8
9
try:
10
if not os.path.exists('data'):
11
os.makedirs('data')
12
except OSError:
13
print('Error: Creating directory of data')
14
15
currentFrame = 0
16
17
while(True):
18
# Capture frame by frame
19
ret, frame = cap.read()
20
21
# Only take the first frame and tenth frame
22
if currentFrame == 0:
23
# Saves image of the current frame in jpg file
24
name = './data/frame' + str(currentFrame) + '.jpg'
25
print ('Creating...' + name)
26
cv2.imwrite(name, frame)
27
28
if currentFrame == 5:
29
name = './data/frame' + str(currentFrame) + '.jpg'
30
print ('Creating...' + name)
31
cv2.imwrite(name, frame)
32
33
# To stop duplicate images
34
currentFrame += 1
35
36
cap.release()
37
cv2.destroyAllWindows()
38
Advertisement
Answer
Just make it function ad call it in a for loop for every video
JavaScript
1
38
38
1
import cv2
2
import numpy as np
3
import os
4
5
def frame_capture(file):
6
# Playing video from file:
7
cap = cv2.VideoCapture(file)
8
9
try:
10
if not os.path.exists('data'):
11
os.makedirs('data')
12
except OSError:
13
print('Error: Creating directory of data')
14
15
currentFrame = 0
16
17
while(True):
18
# Capture frame by frame
19
ret, frame = cap.read()
20
21
# Only take the first frame and tenth frame
22
if currentFrame == 0:
23
# Saves image of the current frame in jpg file
24
name = './data/frame' + str(currentFrame) + '.jpg'
25
print ('Creating...' + name)
26
cv2.imwrite(name, frame)
27
28
if currentFrame == 5:
29
name = './data/frame' + str(currentFrame) + '.jpg'
30
print ('Creating...' + name)
31
cv2.imwrite(name, frame)
32
33
# To stop duplicate images
34
currentFrame += 1
35
36
cap.release()
37
cv2.destroyAllWindows()
38
for the loop:
JavaScript
1
6
1
import os
2
for file in os.listdir("/mydir"):
3
if file.endswith(".m4v"):
4
path=os.path.join("/mydir", file))
5
frame_capture(path)
6