Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 逐帧复制视频时无视频输出_Python 2.7_Opencv - Fatal编程技术网

Python 2.7 逐帧复制视频时无视频输出

Python 2.7 逐帧复制视频时无视频输出,python-2.7,opencv,Python 2.7,Opencv,我想在视频文件上叠加一些传感器信息(时间序列)。我认为Python和OpenCV是一种不错的方法,并开始学习基础知识,因此我决定制作一个我能想到的最简单的玩具示例:加载视频并逐帧复制 这是我的代码: import cv2 src = cv2.VideoCapture('input.mp4') if not src.isOpened(): print("Error opening src") quit() width = int(src.get(cv2.cv.CV_CAP_PR

我想在视频文件上叠加一些传感器信息(时间序列)。我认为Python和OpenCV是一种不错的方法,并开始学习基础知识,因此我决定制作一个我能想到的最简单的玩具示例:加载视频并逐帧复制

这是我的代码:

import cv2

src = cv2.VideoCapture('input.mp4')
if not src.isOpened():
    print("Error opening src")
    quit()

width = int(src.get(cv2.cv.CV_CAP_PROP_FRAME_WIDTH))
height = int(src.get(cv2.cv.CV_CAP_PROP_FRAME_HEIGHT))
fps = src.get(cv2.cv.CV_CAP_PROP_FPS)

fourcc = cv2.cv.CV_FOURCC(*'XVID')
dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width))
if not dest.isOpened():
    print("Error opening dest")
    quit()

ret, frame = src.read()
while ret:
    dest.write(frame)
    ret, frame = src.read()

dest.release()
src.release()
  • 预期:作为
    output.avi
    XviD文件的
    input.mp4
    的精确副本
  • 观察到的
    output.avi
    是一个5.6KB的文件,显然只包含一个avi头。它不能被
    mplayer
    复制,也不能被
    cv2.VideoCapture
    读取
以下是我的设置:

  • Debian GNU/Linux 9
  • Python 2.7.13
  • cv.\uuuuuuuuuuuuuuuuuuuu版本
    返回“2.4.9.1”
  • FFmpeg 3.2.5-1
为了再现性,这里有一个命令行,可以使用
YouTube dl
下载非常短的YouTube视频:

youtube-dl 'https://www.youtube.com/watch?v=RfkcI8dhfsQ' -o input.mp4

在这一行中,它应该是
(宽度,高度)
而不是
(高度,宽度)


VideoWriter必须具有与您正在编写的帧相同的大小,否则它无法正常工作。

读取是否真的成功过?我想是的。循环执行51次。(对于我在问题中列出的YouTube视频示例)我现在已经阅读了关于Open CV 2x与FFmpeg 3x不兼容的建议,但我不知道如何确认这是否与我的案例相关。谢谢!我猜我被
frame.shape()
返回的
(高度、宽度、深度)
@giusti愚弄了是的,我不知道他们为什么这么做。这只会让人困惑。
dest = cv2.VideoWriter('output.avi', fourcc, fps, (height, width))