web-dev-qa-db-fra.com

VideoWriter génère un fichier vidéo corrompu

Ceci est mon code pour enregistrer le streaming web_cam. Cela fonctionne mais le problème avec le fichier vidéo de sortie.

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
#fourcc = cv2.cv.CV_FOURCC(*'DIVX')
#out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
out = cv2.VideoWriter('output.avi', -1, 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()
7
Nurul Akter Towhid

Le fichier de sortie est corrompu en raison d'une fréquence d'images et d'une résolution d'image incorrectes. En utilisant ce code:

out = cv2.VideoWriter('output.avi', -1, 20.0, (640,480))

Nous avons défini le fps/frame rate par seconde 20. Ce qui n'était pas correct. De plus, la largeur et la hauteur du cadre étaient incorrectes. J'ai résolu en obtenant fps, largeur, hauteur à partir du profil web_cam capturé.

cap = cv2.VideoCapture(0)  #web-cam capture

fps = cap.get(cv2.CAP_PROP_FPS)
width  = cap.get(cv2.CAP_PROP_FRAME_WIDTH)   # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # float
out = cv2.VideoWriter('output.avi', -1,fps, (int(width), int(height)))
3
Nurul Akter Towhid

J'ai ajouté codecparameter à la fonction cv2.videowriter.

import numpy as np
import cv2

cap = cv2.VideoCapture(0)
# Define the codec and create VideoWriter object
#fourcc = cv2.cv.CV_FOURCC(*'DIVX')
        #out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))
fps = cap.get(cv2.CAP_PROP_FPS)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH)   # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
codec = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
out = cv2.VideoWriter('output.avi',codec,fps, (int(width),\
                                                    int (height)))

#out = cv2.VideoWriter('output.avi', -1, 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()

J'espère que vous verrez ce qui est différent dans mon code et votre code. Le mien fonctionne maintenant. Utilisation du codec MJPG pour .avi extention l'indention est un peu foirée, veuillez pardonner car je suis un utilisateur pour la première fois. Le fichier video n'est plus corrompu. J'ai obtenu les informations de: Lien

2
Anshuman Jayaprakash