Python 2.7 逐帧复制视频时无视频输出
我想在视频文件上叠加一些传感器信息(时间序列)。我认为Python和OpenCV是一种不错的方法,并开始学习基础知识,因此我决定制作一个我能想到的最简单的玩具示例:加载视频并逐帧复制 这是我的代码: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
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()
- 预期:作为
XviD文件的output.avi
的精确副本input.mp4
- 观察到的:
是一个5.6KB的文件,显然只包含一个avi头。它不能被output.avi
复制,也不能被mplayer
读取cv2.VideoCapture
- Debian GNU/Linux 9
- Python 2.7.13
返回“2.4.9.1”cv.\uuuuuuuuuuuuuuuuuuuu版本
- 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))