2015-03-28 19 views
5

Tôi vừa bắt đầu lập trình python với opencv. tôi đã sử dụng các trang sau đây từ OpenCV 3.0.0 hướng dẫnpython opencv videowrite không viết video

Tutorial at read the docs

Khi tôi cố gắng sử dụng các ví dụ mà tiết kiệm video, nó không hoạt động. Nó hiển thị nội dung từ webcam và cũng tạo tệp có tên output.avi, nhưng khi tôi kiểm tra kích thước của ouput.avi, nó không phải là byte. Tôi cũng đã cố gắng sử dụng các codec khác nhau, như YUY2

tôi sử dụng python 2.7.8 và 3.0.0 opencv và cửa sổ 8.1

Trả lời

2

Hãy chắc chắn rằng bạn đang sử dụng đúng fourcc mã 4-byte. Ví dụ về hướng dẫn có:

fourcc = cv2.VideoWriter_fourcc(*'XVID') 
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) 

Mã 'XVID' này chỉ có thể hoạt động cho Linux. Tài liệu ở trên ví dụ nêu rõ (trong hướng dẫn): "Trong Windows: DIVX (Thêm để được kiểm tra và thêm vào)." Vì vậy, nếu bạn chưa có, hãy thử thay thế dòng bốncc ở trên bằng:

fourcc = cv2.VideoWriter_fourcc(*'DIVX') 

Tôi sử dụng cv2.VideoWriter trên Linux khá thường xuyên và luôn hoạt động. Vì vậy, nếu ở trên không làm việc bạn luôn có thể thử nó trên một vm linux.

+0

Thật không may, tôi không thể làm cho nó hoạt động.DIVX không hoạt động cho tôi. Cảm ơn bạn đã giúp đỡ. – Zachzhao

+0

CV2 sử dụng ffmpeg. Có thể là cv2 không tìm thấy ứng dụng. – Scott

+0

Tôi đã xem xét mã của mình và thấy rằng tôi có dòng này: bốncc = cv2.cv.CV_FOURCC ('X', 'V', 'I', 'D'). Đây là cho một vm Linux nhưng bạn có thể thực hiện các thay đổi thích hợp và thử nó. Tôi không biết nơi ban đầu tôi tìm thấy mã này nhưng nó hoạt động cho tôi. – Scott

-1

Nó sẽ là một vấn đề với codec bạn đang sử dụng.

Các bạn đã thử:

cv.CV_FOURCC('i', 'Y', 'U', 'V')

một này làm việc cho tôi.

6

Thay thế:

fourcc = cv2.VideoWriter_fourcc(*'XVID') 

Với:

fourcc = cv2.VideoWriter_fourcc('M','J','P','G') 

Làm việc đối với tôi ...

Tổng quát hơn:

Tra cứu mã fourcc của định dạng nén video bạn 'lại sau here và bất kỳ mã nào là - ví dụ' FMP4 'cho FFMpeg - p tai nó trong theo cách sau đây:

cv2.VideoWriter_fourcc ('F', 'M', 'P', '4')

1

tôi đã cùng một vấn đề và tôi giải quyết nó bằng cách xác định đầu ra video độ phân giải chính xác giống như đầu vào:

cap = cv2.VideoCapture('vtest.avi') 
... 
out = cv2.VideoWriter('output.avi',fourcc, 20.0,(int(cap.get(3)),int(cap.get(4)))) 

Tất nhiên chắc chắn bạn đã cài đặt và làm việc ffmpeg.

0

Trên các cửa sổ 7 và sử dụng Python 2.7 và OpenCV 2.4.8, tôi đã trải nghiệm thực tế là nếu tệp NAME là "output.mpg" sẽ không ghi.

Tôi đã giải quyết bằng cách đổi thành "output.avi".

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