728x90
아래 코드에서 주의할 점은, 본인의 프레임 개수는 약 370개로 0번 ~ 369번 이미지들이 존재했다.
만약 프레임 개수가 천단위가 넘어간다면 추가적인 배열이 하나 더 필요할 것이다.
배열을 따로 하는 이유는, sorting 할때 0, 1, 2... 순서가 아니라 0, 1, 10, 100, 101... 순으로 sorting 되기 때문이다.
natsort를 이용하는 방법도 있다고 한다!
그리고 fps를 20으로 지정해뒀는데, 이건 원하는 fps 값에 따라 적절히 바꿔주면 된다
import cv2
import re
import os
import numpy as np
path = '이미지들(프레임들)이 모여있는 폴더 경로'
# 파일 가져오기
def get_files(path):
for root, subdirs, files in os.walk(path):
list_files = []
if len(files) > 0:
for f in files:
fullpath = root + '/' + f
list_files.append(fullpath)
return list_files
image_files = get_files(path)
### 정렬하기
store1 = []
store2 = [] # 정렬한 프레임들을 담을 배열
store3 =[]
for i in image_files :
if len(i) == 10: # ex) frame0.jpg
store1.append(i)
elif len(i) == 11 : # ex) frame10.jpg
store2.append(i)
elif len(i) == 12 : # ex) frame100.jpg
store3.append(i)
paths = list(np.sort(store1)) + list(np.sort(store2)) + list(np.sort(store3))
### 정렬 끝
pathOut = '동영상 파일 이름.mp4'
fps = 20
frame_array = []
for idx in range('이미지 개수') :
img = cv2.imread(paths[idx])
height, width, layers = img.shape
size = (width,height)
frame_array.append(img)
out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'MPEG'), fps, size)
for i in range(len(frame_array)):
# writing to a image array
out.write(frame_array[i])
out.release()
728x90
'파이썬' 카테고리의 다른 글
파이썬 int(a/b)와 a//b 차이 (0) | 2023.07.06 |
---|---|
파이썬 이미지 파일 확장자명 한번에 바꾸기 (0) | 2023.06.10 |
[Pytorch] custom dataset의 mean, std 구하기 (0) | 2023.05.23 |
M1, M2 맥북에서 아나콘다 파이썬 3.6 또는 3.7 설치하기 (0) | 2023.04.17 |
파이썬 for문의 index 수정하기 (0) | 2023.03.28 |