python-Opencv cv2.VideoWriter写视频失败,无法打开,大小不正常,
·
1 图像写入视频
1.1 代码
import numpy as np
import cv2 as cv
def image_to_video(img_dir, video_file):
files = os.listdir(img_dir)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'XVID')
fps = 20.0
out = cv.VideoWriter('output.avi', fourcc, fps, (img.shape[1], img.shape[0]))
for ff in files:
img = cv2.imread(os.path.join(img_dir, ff))
vid.write(img)
# 完成工作后释放
out.release()
1.2 VideoWriter_fourcc常见编码参数
| 参数列表 | 说明 | 视频格式 |
|---|---|---|
| cv2.VideoWriter_fourcc(‘X’,‘2’,‘6’,‘4’) | MPEG-4编码 .mp4 想限制结果视频的大小,这可能是最好的选择。 | .mp4 |
| cv2.VideoWriter_fourcc(‘M’, ‘P’, ‘4’, ‘V’) | 相对较旧的MPEG-4编码。如果要限制结果视频的大小,这是一个很好的选择。 | .m4v |
| cv2.VideoWriter_fourcc(‘P’, ‘I’, ‘M’, ‘I’) | MPEG-1编码类型,随机访问,灵活的帧率、可变的图像尺寸 | .avi |
| cv2.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’) | MPEG-4编码类型,对运动物体可以保证有良好的清晰度,时间/画质具有可调性。 | .avi |
| cv2.VideoWriter_fourcc(‘I’,‘4’,‘2’,‘0’) | YUV编码类型,4:2:0色度子采样。兼容性好,但会产生大文件 | .avi |
| cv2.VideoWriter_fourcc(‘T’, ‘H’, ‘E’, ‘O’) | 参数是Ogg Vorbis,音频压缩格式,有损压缩,类似于MP3等的音乐格式 | .ogv |
| cv2.VideoWriter_fourcc(‘F’, ‘L’, ‘V’, ‘1’) | 参数是Flash视频,形成的文件极小、加载速度极快 | .flv |
2. 问题排查
2.1 检查VideoWriter的长宽
- 如果是直接定义的长宽
要确定输入图像的长宽和VideoWriter中对象的长宽是否一致。 - 如果是读取图片后设定长宽
要注意cv2读取之后的长宽和VideoWriter中是相反的,所以需要:
img = cv2.imread(os.path.join(img_dir, files[0]))
vid = cv2.VideoWriter(video_file, fourcc, fps, (img.shape[1], img.shape[0]))
2.2 检查图像的通道
VideoWriter不适用于单通道灰度图,所以如果想要正常写入,需要把灰度图转为三通道,再写入:
img2 = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
更多推荐
所有评论(0)