视频按照每秒任意帧保存:
做目标检测,发现视频格式有点问题,但至少opencv读取还是没问题的。硬着头皮对视频进行检测之后,帧乱了。。并且每个视频乱的程度还不一样
这个更离谱,175fps。。
视频时长变得很短。
没找到问题所在,但至少没丢帧(总帧数没变),所以改一下帧数。代码如下:
import cv2
import os
import shutil
# 设置图片文件夹路径和输出视频文件名
# image_folder = r'\images' # 大帧数时图片中转,一般来说无需设置
video_name = r'\predict2\video.mp4'# 生成后的视频保存的路径
error_video = r'\predict2\video.avi'# 乱帧视频的路径
cap = cv2.VideoCapture(error_video)
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
frame_count = 0
i = 0
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 使用MP4编码
out = cv2.VideoWriter(video_name, fourcc, 10.0, (width, height)) # 10.0是目标fps,自行修改
frame_list = []
while True:
ret,frame = cap.read()
if not ret:
break
frame_list.append(frame)
frame_count += 1
if frame_count == 10: #最好和fps保持一致,太大的话会给内存带来负担
frame_count = 0
# 大帧数时用,在image_folder中转一下
# images = sorted([img for img in os.listdir(image_folder) if img.endswith((".png", ".jpg"))], key=lambda x: int(x.split('.')[0]))
# frame = cv2.imread(os.path.join(image_folder, images[0]))
for image in frame_list:
out.write(image)
# shutil.rmtree(image_folder)
# os.makedirs(image_folder, exist_ok=True)
frame_list = []
i+=1
print(f'生成{i}秒')
out.release()