opencv - OpenCV VideoWriter 不写入 Output.avi
问题描述
我正在尝试编写一段简单的代码来获取视频,对其进行裁剪并写入输出文件。
系统设置:
OS: Windows 10
Conda Environment Python Version: 3.7
OpenCV Version: 3.4.2
ffmpeg Version: 2.7.0
文件输入规格:
Codec: H264 - MPEG-4 AVC (part 10)(avc1)
Type: Video
Video resolution: 640x360
Frame rate: 5.056860
代码无法产生输出(它创建文件但不写入文件):
import numpy as np
import cv2
cap = cv2.VideoCapture('croptest1.mp4')
# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc('F', 'M', 'P', '4')
out = cv2.VideoWriter('output.avi', fourcc, 20.0,
(int(cap.get(3)), int(cap.get(4))))
# Verify input shape
width = cap.get(3)
height = cap.get(4)
fps = cap.get(5)
print(width, height, fps)
while(cap.isOpened()):
ret, frame = cap.read()
if ret == True:
# from top left =frame[y0:y1, x0:x1]
cropped_frame = frame[20:360, 0:640]
# write the clipped frames
out.write(cropped_frame)
# show the clipped video
cv2.imshow('cropped_frame', cropped_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()
Fourcc 和 out 变量的变体试图让编解码器工作:
fourcc = cv2.cv.CV_FOURCC(*'DIVX')
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('ditch_effort.avi', -1, 20.0, (640, 360))
基于这个链接,我应该能够参考这个fourcc参考列表来确定要使用的合适的fourcc压缩代码。我尝试了很多变体,但无法获得要写入的输出文件。当我运行代码时,#verify 输入形状变量会打印相应的 640、360 和正确的帧速率。
谁能告诉我我的问题是什么......将不胜感激。
解决方案
错误的原因是(640,340)的尺寸与cropped_frame
(640,360)中声明的尺寸之间的差异writer
。
所以作者应该是:
out = cv2.VideoWriter('output.avi', fourcc, 20.0,(640,340))
推荐阅读
- angular - 内联部分
仍然抱怨缺少字段? - javascript - 反应 onChange 方法不改变对象的状态
- r - 在 R 中为引用类创建初始化方法
- r - 将数据映射到数据框中的列的更好方法?
- azure - 将 RHEL BYOS 市场映像部署到 Azure
- typeform - 使用响应 API 从 Typeform 检索所有响应
- c - 如何在 8 个 LED 板上以二进制计数 - PIC
- java - 按下 Enter 后 JavaFX 切换文本字段
- python - 如何对 pandas.DataFrame 上的滚动列表理解进行矢量化
- python - 如何知道在numpy中沿轴进行操作的轴?