尝试按frame_id保存帧:
在ffmpeg中(我相信会产生有效的结果):
ffmpeg -i <video_filepath> -vf "select=eq(n\,<frame_id>)" -vframes 1 <frame_id>.png
在opencv中(会产生不同的结果):
def save_frame(input_video_filepath, output_image_filepath, frame_id):
cap = cv2.VideoCapture(input_video_filepath)
n_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
iter = tqdm(range(n_frames))
for i in iter:
flag, frame = cap.read()
if i==frame_id:
cv2.imwrite(output_image_filepath, frame)
iter.close()
break
为什么opencv版本会产生不同的结果?
更新:
将webm转换为mp4,例如:
ffmpeg -i <input_filepath>.webm -r 25 <output_filepath>.mp4
然后使用这两种方法会产生相同的结果,所以据我了解,opencv的webm格式存在一些问题?