2016-04-15 170 views
5

我有这样的代码:Python和OpenCV的 - 不能写可读的AVI视频文件

import numpy as np 
import cv2 


cap = cv2.VideoCapture('C:/Users/Hilman/haatsu/drive_recorder/sample/3.mov') 

# Define the codec and create VideoWriter object 
fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480)) 

while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 
     frame = cv2.flip(frame,0) 

     # write the flipped frame 
     out.write(frame) 

     cv2.imshow('frame',frame) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break 
    else: 
     break 

# Release everything if job is finished 
cap.release() 
out.release() 
cv2.destroyAllWindows() 

output.avi无法播放。

也尝试将out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480))更改为像这样的东西(如有人建议)out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))。但是当我这样做时,我收到了这条消息

OpenCV: FFMPEG: tag 0xffffffff/'    ' is not found (format 'avi/AVI (Audio Video Interleaved)')'

可能是什么问题?顺便说一句,我正在使用Windows 10。

回答

0

我使用的OpenCV 2.4.9在Ubuntu 14.04,和下面的代码工作得很好,对我来说:

import cv2 
import cv 
cap = cv2.VideoCapture(0) 
ret,img=cap.read() 
height , width , layers = img.shape  
fps=20 
video = cv2.VideoWriter("rec_out.avi", cv.CV_FOURCC(*'DIVX'), fps, (img.shape[1], img.shape[0])) 
while True: 

    ret,img=cap.read() 
    height , width , layers = img.shape 
     video.write(img) 
    cv2.imshow('Video', img) 
    #video.write(img) 
    if(cv2.waitKey(10) & 0xFF == ord('b')): 
      break 



cv2.destroyAllWindows() 
video.release() 
+0

OP正在使用Windows 10. –

+0

是的,您确实在您的问题中提到过。我希望这可以在你的机器上工作,就像它在我的机器上一样。 –

1

我无法得到这些代码要么我的Windows 10机器上运行。

因此,这里是我所做的:

  1. 我跟着these instructions和机器上安装了最新的ffmpeg编译:
    1. 下载latest static build for Windows,然后解压缩文件。您可能需要7zip才能提取。
    2. 在C上创建一个文件夹:\称为ffmpeg
    3. 复制提取的文件的内容到C:\ ffmpeg的
    4. 编辑PATH环境变量在末尾以下条目追加: C:\ffmpeg\bin;
    5. 确认这一切都是通过打开命令提示符工作正确,输入以下内容(请注意,您可能需要运行CMD为管理员): ffmpeg -version
  2. 修改您的代码如下:

_

import numpy as np 
import cv2 
import os 

base_path = 'C:\\Users\\Hilman\\haatsu\\drive_recorder\\sample\\' 
cap = cv2.VideoCapture('%s3.mov' % base_path) 

i = 0 
while(cap.isOpened()): 
    ret, frame = cap.read() 
    if ret==True: 
     frame = cv2.flip(frame,0) 
     cv2.imwrite(os.path.join(base_path, str(i) + '.png'), frame) 
     i = i + 1 
    else: 
     break 

# Release everything if job is finished 
cap.release() 
  • C:\Users\Hilman\haatsu\drive_recorder\sample打开的命令提示和运行下面的命令:ffmpeg -framerate 29 -i %d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
  • 你的视频应被保存为out.mp4
  • +0

    等一下,python命令怎么样?我没有跟随。对不起,我还是个学习者。 – Hilman

    +0

    @Hilman:我没有弄清楚哪些编解码器和文件扩展名与我的Windows 10安装兼容,而是在控制台窗口中使用了ffmpeg命令。 –