2016-04-15 25 views
5

Tôi có một mã như thế này:Python và OpenCV - Không thể ghi có thể đọc được các file video 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() 

Nhưng output.avi không thể chơi.

Đã thử cũng thay đổi out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480)) thành nội dung như thế này (theo đề xuất của một số người) out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480)). Nhưng khi tôi làm điều này, tôi nhận được thông báo này

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

Điều gì có thể là vấn đề? Tôi đang sử dụng Windows 10 bằng cách này.

Trả lời

0

Tôi đang sử dụng OpenCV 2.4.9 trên Ubuntu 14.04, và đoạn mã sau làm việc tốt cho tôi:

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 đang sử dụng Windows 10. –

+0

Có, bạn đã đề cập đến điều đó trong câu hỏi của bạn. Tôi đã hy vọng rằng điều này sẽ làm việc trên máy tính của bạn như nó trên tôi. –

1

tôi không thể nhận được mã để chạy trên máy tính Windows 10 của tôi, hoặc.

Vì vậy, đây là những gì tôi đã làm:

  1. Tôi đi theo these instructions và cài đặt ffmpeg xây dựng mới nhất trên máy tính:
    1. Tải latest static build for Windows và sau đó trích xuất các tập tin. Bạn có thể cần 7zip để giải nén.
    2. Tạo một thư mục trong C: \ gọi ffmpeg
    3. Sao chép nội dung của các file trích xuất vào C: \ ffmpeg
    4. Chỉnh sửa biến môi trường PATH của bạn để nối thêm vào cuối các mục sau đây: C:\ffmpeg\bin;
    5. Confirm rằng tất cả mọi thứ đang làm việc đúng bằng cách mở một dấu nhắc cmd và nhập dữ liệu sau (Lưu ý: bạn có thể cần phải chạy cmd as administrator): ffmpeg -version
  2. Modified mã của bạn như sau:

_

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() 
  1. Mở một dấu nhắc lệnh tại C:\Users\Hilman\haatsu\drive_recorder\sample và chạy lệnh sau: ffmpeg -framerate 29 -i %d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
  2. Video của bạn phải được lưu lại dưới dạng out.mp4.
+0

Đợi một phút, lệnh python thì thế nào? Tôi không theo dõi. Xin lỗi, tôi vẫn là người học. – Hilman

+0

@Hilman: Thay vì tìm ra CODEC và phần mở rộng tệp nào tương thích với cài đặt Windows 10 của tôi, tôi đã sử dụng lệnh ffmpeg trong cửa sổ bảng điều khiển. –

Các vấn đề liên quan