小智 13
我有同样的问题,我通过指定视频输出分辨率与输入完全相同来解决它:
cap = cv2.VideoCapture('vtest.avi')
...
out = cv2.VideoWriter('output.avi',fourcc, 20.0,(int(cap.get(3)),int(cap.get(4))))
Run Code Online (Sandbox Code Playgroud)
当然要确保你安装了ffmpeg并正常工作.
Sab*_* 錆兎 13
我在这个问题上挣扎了几个小时,然后我意识到我输入了错误的图像形状。
它是(width, height),即:
(image.shape[1], image.shape[0])
Run Code Online (Sandbox Code Playgroud)
并不是
(image.shape[0], image.shape[1])
Run Code Online (Sandbox Code Playgroud)
这就是我的工作代码最终的样子......(我在 Windows 机器上):
video_path = FILENAME + '.avi'
size = images[0].shape[1], images[0].shape[0] ## <<<--- NOTICE THIS
video = cv2.VideoWriter(video_path,cv2.VideoWriter_fourcc(*'DIVX'), 60, size)
for img in images:
video.write(img)
cv2.destroyAllWindows()
video.close()
Run Code Online (Sandbox Code Playgroud)
Lam*_*ell 12
更换:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
Run Code Online (Sandbox Code Playgroud)
附:
fourcc = cv2.VideoWriter_fourcc('M','J','P','G')
Run Code Online (Sandbox Code Playgroud)
为我工作......
更普遍:
查一查你后的视频压缩格式的FOURCC码在这里,不管代码-为FFmpeg的实例"FMP4" -通过以下方式将其插入:
cv2.VideoWriter_fourcc('F','M','P','4')
Run Code Online (Sandbox Code Playgroud)
检查图像的分辨率!我尝试使用奇怪形状的图像 (1284x709),但最终得到了 1k 大小的无法读取的视频。将图像大小调整为最接近的“常见”分辨率后:
image = cv2.resize(image, (1280,720)),效果很好。
确保使用正确的fourcc 4字节代码。教程中的示例具有:
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
Run Code Online (Sandbox Code Playgroud)
此“ XVID”代码仅适用于Linux。示例上方的文档指出(在本教程中):“在Windows中:DIVX(尚待测试和添加)。” 因此,如果您还没有,请尝试将上述fourcc行替换为:
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
Run Code Online (Sandbox Code Playgroud)
我在Linux上经常使用cv2.VideoWriter,并且它始终有效。因此,如果上述方法不起作用,您可以随时在linux vm上尝试。
小智 6
就我而言,我认为编解码器是一个障碍,但事实并非如此。相反,调整 videoWriter() 使用的尺寸可以解决问题:
(ok, frame) = cv2.VideoCapture(videoPath).read()
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output, fourcc, 10.0, (1280, 720))
Run Code Online (Sandbox Code Playgroud)
使用 (1280,720) 是因为我的视频输出 (1280, 720, 3) 中的 frame.shape。它使 avi 转 mp4 成为可能,反之亦然。不必担心协调编解码器。
小智 5
我怀疑视频写入失败的原因有很多,就我而言,我的帧是由 3 通道图像和 4 通道图像(透明覆盖)组成的。将最终结果转换为 BGR 格式如下,视频即可成功保存。
width = 1280
height = 720
FPS = 30
fourcc = VideoWriter_fourcc(*'avc1')
video = VideoWriter('output.mp4', fourcc, float(FPS), (width, height))
for img in images:
frame = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)
video.write(frame)
video.release()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20480 次 |
| 最近记录: |