我需要从视频文件中读取帧,并从这些帧创建新的视频。然后我从新视频中读取这些帧,我需要这些帧与我从原始视频中读取的帧相同。
这就是我所做的(举个例子,我只用了一个框架)-
视频读取帧:
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()
从new_video:读取帧
vidcap = cv2.VideoCapture('new_video.mp4')
success,new_frame = vidcap.read()
将orig_frame与new_frame进行比较,发现它们并不完全相同。
orig_frame:
new_frame:
如何从原始视频和新视频中获得相同的帧?
发布于 2020-05-13 16:56:04
这在MP4s中是不可能的,因为他们使用有损编码来编写视频数据。你将无法得到精确的像素匹配的两个视频.
但是,如果您想获得精确的匹配,则需要使用无损编解码器。
这取决于您使用哪种系统来确定支持什么编解码器,但很长的一步就是使用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
https://stackoverflow.com/questions/61779630
复制相似问题