从视频读取的cv2帧与从重新创建的视频读取的帧不同

2024-10-01 04:44:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从视频文件中读取帧并从这些帧创建新视频。然后我从新视频中读取帧,我需要这些帧与我从原始视频中读取的帧相同

这就是我所做的(例如,我只用了一个帧)——

从视频读取帧:

vidcap = cv2.VideoCapture('video_name.mp4')
success,orig_frame = vidcap.read()

从此帧写入新视频:

size = (1920,1080)
vidWriter = cv2.VideoWriter('new_video.mp4', cv2.VideoWriter_fourcc(*'MP4V'), 25, size)
vidWriter.write(orig_frame)
vidWriter.release()

从新视频读取帧:

vidcap = cv2.VideoCapture('new_video.mp4')
success,new_frame = vidcap.read()

将原始帧与新帧进行比较表明,它们并不完全相同

原始框架:

enter image description here

新框架:

enter image description here

如何从原始视频和新视频中获得相同的帧


Tags: 框架newreadsize视频videocv2frame
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:40

这对于MP4是不可能的,因为它们使用有损编码来写入视频数据。您将无法在两个视频之间获得精确的逐像素匹配

但是,如果要获得精确匹配,则需要使用无损编解码器

这取决于您使用什么系统来确定支持什么编解码器,但很难使用PNG编码将视频帧写入文件

尝试:

size = (1920,1080)
vidWriter = cv2.VideoWriter('new_video.avi', cv2.VideoWriter_fourcc(*'png '), 25, size)
vidWriter.write(orig_frame)
vidWriter.release()

如果上述情况不令人满意,请尝试咨询:Lossless compression for video in opencv


如果我能提出一些建议,我将使用OpenCV来实现这一点,因为您无法控制输出比特率、颜色分布等。使用FFMPEG可以更好地控制这一点。请看这篇关于如何用无损压缩复制视频的帖子:Lossless ffmpeg conversion/encoding

相关问题 更多 >