read - Python y OpenCV: no se pueden escribir archivos de video avi legibles
save video python opencv (2)
Estoy usando OpenCV 2.4.9 en Ubuntu 14.04, y el siguiente código funciona bien para mí:
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()
Tengo un código como este:
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()
Pero el output.avi
no se puede reproducir.
Probado también cambie el out = cv2.VideoWriter(''output.avi'', fourcc, 20.0, (640,480))
a algo como esto (como lo sugieren algunas personas) out = cv2.VideoWriter(''output.avi'', -1, 20.0, (640,480))
. Pero cuando hice esto, recibí este mensaje
OpenCV: FFMPEG: tag 0xffffffff/'' '' is not found (format ''avi / AVI (Audio Video Interleaved)'')''
.
¿Cual podría ser el problema? Estoy usando Windows 10 por cierto.
Tampoco pude conseguir que ese código se ejecutara en mi máquina con Windows 10.
Entonces esto es lo que hice:
- Seguí estas instrucciones e instalé la última versión de ffmpeg en la máquina:
- Descargue la última compilación estática para Windows y luego extraiga los archivos. Es posible que necesites 7zip para extraer.
- Crea una carpeta en C: / llamado
ffmpeg
- Copie los contenidos de los archivos extraídos en C: / ffmpeg
- Edite su variable de entorno PATH para agregar al final la siguiente entrada:
C:/ffmpeg/bin;
- Confirme que todo está funcionando correctamente abriendo un indicador de cmd e ingrese lo siguiente (tenga en cuenta que es posible que necesite ejecutar cmd como administrador):
ffmpeg -version
- Modificó su código de la siguiente manera:
_
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()
- Abrió un símbolo del sistema en
C:/Users/Hilman/haatsu/drive_recorder/sample
y ejecutó el siguiente comando:ffmpeg -framerate 29 -i %d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4
- Su video debe guardarse como
out.mp4
.