~ 8000 프레임의 비디오 (.mp4)가 있습니다. 나는 비디오에서 각 프레임을 잡아야하는 시간과 잡아 줄 프레임의 수를 알려주는 CSV 파일을 가지고있다. number_of_frames in video = 8000
번은 같은 배열입니다 [0.004, 0.005, ... 732s]
주어진 데이터의 마지막 시간은 732 초입니다. 따라서 FPS = 8000/732 = ~10
opencv 및 python 또는 moviepy를 사용하여 이미지 추출
해당 특정 시간에 비디오에서 이미지 프레임을 추출 할 수 있기를 원합니다. 그런 다음 이미지 경로를 .csv 파일에 씁니다. 첫 번째 방법 (OpenCV의) :
with open('./data/driving.csv', 'w') as csvfile:
fieldnames = ['image_path', 'time', 'speed']
writer = csv.DictWriter(csvfile, fieldnames = fieldnames)
writer.writeheader()
vidcap = cv2.VideoCapture('./data/drive.mp4')
for idx, item in enumerate(ground_truth):
# set video capture to specific time frame
# multiply time by 1000 to convert to milliseconds
vidcap.set(cv2.CAP_PROP_POS_MSEC, item[0] * 1000)
# read in the image
success, image = vidcap.read()
if success:
image_path = os.path.join('./data/IMG/', str(item[0]) +
'.jpg')
# save image to IMG folder
cv2.imwrite(image_path, image)
# write row to driving.csv
writer.writerow({'image_path': image_path,
'time':item[0],
'speed':item[1],
})
이 방법은 그러나, 나에게 원하는 프레임의 총 수를 포기하지 않았다
나는 여러 방법을 시도했다. 그것은 단지 FPS = 25의 비디오에 해당하는 프레임 수를주었습니다. 저는 FPS = 8000/732s = 10.928s라고 믿습니다.나는 그와 유사한 스타일의 각 이미지를 캡처 moviepy를 사용하여 시도 :
from moviepy.editor import VideoFileClip
clip1 = VideoFileClip('./data/drive.mp4')
with open('./data/driving.csv', 'w') as csvfile:
fieldnames = ['image_path', 'time', 'speed']
writer = csv.DictWriter(csvfile, fieldnames = fieldnames)
writer.writeheader()
# Path to raw image folder
abs_path_to_IMG = os.path.join('./data/IMG/')
for idx, item in enumerate(ground_truth):
image_path = os.path.join('./data/IMG/', str(item[0]) + '.jpg')
clip1.save_frame(image_path, t = item[0])
# write row to driving.csv
writer.writerow({'image_path': image_path,
'time':item[0],
'speed':item[1],
})
그러나이 방법은 어떤 이유로 나는 시간의 비디오 수백의 마지막 프레임을 캡처하고, 하나가 작동하지 않았다.