gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:21:56 24 4
gpt4 key购买 nike

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

这就是我所做的(例如,我只用一帧就完成了)-

从视频中读取帧:

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:

enter image description here

new_frame:

enter image description here

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

最佳答案

对于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

关于python - 从视频读取的cv2帧与从重新创建的视频读取的帧不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61779630/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com