首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从视频读取的cv2帧不同于从重新创建的视频读取的帧。

从视频读取的cv2帧不同于从重新创建的视频读取的帧。
EN

Stack Overflow用户
提问于 2020-05-13 16:15:52
回答 1查看 491关注 0票数 0

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

这就是我所做的(举个例子,我只用了一个框架)-

视频读取帧:

代码语言:javascript
运行
复制
vidcap = cv2.VideoCapture('video_name.mp4')
success,orig_frame = vidcap.read()

从这个帧写新视频:

代码语言:javascript
运行
复制
size = (1920,1080)
vidWriter = cv2.VideoWriter('new_video.mp4', cv2.VideoWriter_fourcc(*'MP4V'), 25, size)
vidWriter.write(orig_frame)
vidWriter.release()

从new_video:读取帧

代码语言:javascript
运行
复制
vidcap = cv2.VideoCapture('new_video.mp4')
success,new_frame = vidcap.read()

将orig_frame与new_frame进行比较,发现它们并不完全相同。

orig_frame:

new_frame:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-13 16:56:04

这在MP4s中是不可能的,因为他们使用有损编码来编写视频数据。你将无法得到精确的像素匹配的两个视频.

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

这取决于您使用哪种系统来确定支持什么编解码器,但很长的一步就是使用PNG编码将视频帧写入文件。

尝试:

代码语言:javascript
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61779630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档