用python实现将视频中的帧保存为图像。
video2frames.py
- import cv2
- import os
-
- def video2frames(videofile, savepath):
- vcap = cv2.VideoCapture()
- vcap.open(videofile)
-
- n = 1
- frame_interval = 12 # 每隔frame_interval帧保存图像
- total_frames = int(vcap.get(cv2.CAP_PROP_FRAME_COUNT))
- print(f'total frames: {total_frames}') # 267
-
- for i in range(total_frames):
- ret, frame = vcap.read()
-
- if i % frame_interval == 0:
- filename = videofile.split('.')[-1] + '_' + str(n) + '.jpg'
- print(filename)
-
- # 保存当前帧图像,以下两个方式都可以
- cv2.imencode('.jpg', frame)[1].tofile(os.path.join(savepath, filename))
- # cv2.imwrite(os.path.join(savepath, filename), frame)
- n += 1
-
- vcap.release()
-
-
- if __name__ == '__main__':
- savepath = './frames'
- videofile = 'demo.mp4'
- video2frames(videofile, savepath)
用python实现将文件夹中的图像生成视频。
frames2video.py
- import os
- import cv2
- import glob
-
- def video2frames(imgspath, savepath):
- out_vid = None
- imgfiles = sorted(glob.glob(os.path.join(imgspath, '*.*')))
- for imgfile in imgfiles:
- print(imgfile)
- img = cv2.imread(imgfile)
- savefile = os.path.join(savepath, 'test.mp4')
-
- if out_vid is None:
- out_vid = cv2.VideoWriter(savefile, cv2.VideoWriter_fourcc(*'mp4v'), 12, (img.shape[1], img.shape[0]))
- out_vid.write(img)
-
- out_vid.release()
-
-
- if __name__ == '__main__':
- savepath = './'
- imgspath = './images/'
- video2frames(imgspath, savepath)