2015-03-28 16 views
5

Ho appena iniziato a programmare python con opencv. Ho usato la seguente pagina da OpenCV 3.0.0 esercitazionepython opencv videowrite non scrive video

Tutorial at read the docs

Quando ho provato ad utilizzare l'esempio che salva i video, non funziona. Visualizza il contenuto dalla webcam e crea anche un file chiamato output.avi, ma quando ho controllato la dimensione di ouput.avi, era zero byte. Ho anche provato ad utilizzare diversi codec, come YUY2

Io uso python 2.7.8 e 3.0.0 OpenCV e Windows 8.1

risposta

2

Assicurarsi che si sta utilizzando il corretto fourcc codice a 4 byte. L'esempio del tutorial ha:

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

Questo codice 'XVID' può funzionare solo per linux. La documentazione sopra l'esempio indica (nel tutorial): "In Windows: DIVX (Altro da testare e aggiungere)." Quindi, se non si dispone, provare a sostituire la linea fourcc sopra con:

fourcc = cv2.VideoWriter_fourcc(*'DIVX') 

Io uso cv2.VideoWriter su linux abbastanza spesso e funziona sempre. Quindi, se quanto sopra non funziona, puoi sempre provarlo su un Linux vm.

+0

Purtroppo, non riesco a farlo funzionare.DIVX non funziona per me. Grazie dell'aiuto. – Zachzhao

+0

CV2 fa uso di ffmpeg. Potrebbe essere che cv2 non sta trovando l'applicazione. – Scott

+0

Ho controllato il mio codice e ho scoperto che ho questa riga: fourcc = cv2.cv.CV_FOURCC ('X', 'V', 'I', 'D'). Questo è per un vm di Linux, ma potresti apportare le modifiche appropriate e provarlo. Non so dove ho originariamente trovato questo codice ma funziona per me. – Scott

-1

Dovrebbe essere un problema con il codec che stai utilizzando.

Hai provato:

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

Questo ha funzionato per me.

6

Sostituzione:

fourcc = cv2.VideoWriter_fourcc(*'XVID') 

Con:

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

Ha lavorato per me ...

Più in generale:

Cercare il codice fourcc del formato di compressione video dopo lo here e qualunque sia il codice, ad esempio "FMP4" per FFMpeg - p portarla nella seguente maniera:

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

1

Ho avuto lo stesso problema e ho risolto specificando l'uscita video risoluzione esattamente identica all'input:

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

Ovviamente assicurati di aver installato e funzionante ffmpeg.

0

Su Windows 7 e utilizzando Python 2.7 e OpenCV 2.4.8, ho sperimentato il fatto che se il file NOME è "output.mpg" non scriverebbe.

Ho risolto il problema passando a "output.avi".