Python Opencv videowrite no escribe video

Acabo de empezar a progtwigr python con opencv. Usé la siguiente página del tutorial de opencv 3.0.0

Tutorial a leer los documentos

Cuando intenté usar el ejemplo que guarda videos, no funciona. Muestra el contenido de la cámara web y también crea un archivo llamado output.avi, pero cuando verifiqué el tamaño de ouput.avi, era de cero bytes. También intenté usar diferentes codecs, como YUY2

Yo uso Python 2.7.8 y Opencv 3.0.0 y Windows 8.1

Reemplazo:

fourcc = cv2.VideoWriter_fourcc(*'XVID') 

Con:

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

Trabajó para mi…

Más generalmente:

Busque el código fourcc del formato de compresión de video que está buscando aquí , y cualquiera que sea el código, por ejemplo ‘FMP4’ para FFMpeg, conéctelo de la siguiente manera:

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

Tuve el mismo problema y lo resolví especificando la resolución de salida de video exactamente como la entrada:

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

Por supuesto, asegúrate de que tienes ffmpeg instalado y funcionando.

Asegúrese de que está utilizando el código de 4 bytes de fourcc correcto. El ejemplo en el tutorial tiene:

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

Este código ‘XVID’ solo puede funcionar para Linux. La documentación anterior al ejemplo indica (en el tutorial): “En Windows: DIVX (Más para probar y agregar)”. Así que si no lo has hecho, intenta reemplazar la línea fourcc de arriba con:

 fourcc = cv2.VideoWriter_fourcc(*'DIVX') 

Yo uso cv2.VideoWriter en linux con bastante frecuencia y siempre funciona. Por lo tanto, si lo anterior no funciona, siempre puedes probarlo en un Linux vm.

En mi caso, pensé que el códec era un obstáculo, pero no lo era. En su lugar, el ajuste de las dimensiones que consume videoWriter () hizo el truco:

 (ok, frame) = cv2.VideoCapture(videoPath).read() fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter(output, fourcc, 10.0, (1280, 720)) 

(1280,720) se usó porque frame.shape de mis salidas de video (1280, 720, 3). Hizo avi a mp4 y viceversa posible. No tenía que preocuparse por conciliar el códec.

Debería ser un problema con el codec que estás usando.

Has probado:

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

Este funcionó para mí.

En Windows 7 y usando Python 2.7 y OpenCV 2.4.8, experimenté el hecho de que si el archivo NOMBRE es "output.mpg" no se escribiría.

Lo resolví cambiando a "output.avi" .

Cambié el tamaño del grabador de video al tamaño de resolución de mi pantalla y funcionó.

Aquí está la solución.

 out = cv2.VideoWriter("output.avi", fourcc, 5.0, (1920, 1080)) 

Tengo exactamente el mismo problema. Estoy usando OpenCV en C ++, pero creo que aún puedes pasar -1 lugar de elegir el códec para que puedas tener un menú desplegable de códecs disponibles incluso en python. Desde allí probé todos los códecs diferentes y, al igual que Leonard Zhou, el códec IYUV fue el que funcionó para mí. También tenga en cuenta que fue el único que funcionó a pesar de que podía usar XVID bien en otra máquina con el mismo código y el mismo instalador de códec.

EDITAR: Lo que sugerí funcionó como un parche, el problema principal se resolvió en mi final al agregar la dll opencv_ffmpeg en la carpeta del ejecutable.

Comprueba la resolución de tus imágenes! Lo intenté con imágenes de formas extrañas (1284×709) y terminé con videos ilegibles de 1k de tamaño. Después de cambiar el tamaño de mi imagen a la resolución ‘común’ más cercana: image = cv2.resize(image, (1280,720)) , funcionó bien.