简体   繁体   中英

OpenCv - output video is not playing

I want to write a video using OpenCv and process every frames in different seconds.

I am using cv2.VideoWriter, but the output file shows only the first frame of my video and it is not playing. I wanted to add text on the first frame and it did it, but it doesn't continue with the rest of the video. As you can see from the code below, it creates a new output file for the new processed video. It does create the mp4 file, but only showing first frame with the added text and it is not playing.

Any suggestion why this is happening?

Here is my code, I am using Spyder and windows.

fps = int(round(cap.get(5)))
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter(output_video_file,fourcc,fps,(frame_width,frame_height))

while(True):
# Capture frame-by-frame
    ret, frame = cap.read()
    if ret:    
       if cv2.waitKey(28) & 0xFF == ord('q'):
            break
       if between(cap, 0, 10000):            
           font = cv2.FONT_HERSHEY_COMPLEX_SMALL
           cv2.putText(frame,'hello',org=(10,600),fontFace=font,fontScale=10,color=(255,0,0),thickness=4)

           pass
         
           
# Our operations on the frame come here
           out.write(frame)

# Display the resulting frame
           cv2.imshow('frame',frame)

Exactly I could not find the problem in your code because you did not give the between function. However you may try following snippet:

import cv2
import numpy as np

cap = cv2.VideoCapture(0)
if (cap.isOpened() == False):
    print("Unable to read camera feed")
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
fps = int(round(cap.get(5)))
out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'mp4v'), fps, (frame_width, frame_height))

while (True):
    ret, frame = cap.read()

    if ret == True:
        cv2.putText(frame, 'hello',
                    org=(10, 300),
                    fontFace=cv2.FONT_HERSHEY_SIMPLEX,
                    fontScale=5,
                    color=(255, 0, 0),
                    thickness=4)
        out.write(frame)
        cv2.imshow('frame', frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
out.release()
cv2.destroyAllWindows()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM