Как замедлить видео, снятое с помощью cv2? - PullRequest
2 голосов
/ 11 марта 2020

Проблема моего кода в том, что после сохранения видео оно сильно ускоряется, я заметил, что если я изменяю целочисленное значение в cv2.waitkey (), видео меняет скорость, однако даже если я установлю его на 1, он все еще ускоряется

import pyautogui
import os, cv2, threading
import numpy 
import time

#paths
path_videos = os.chdir('C:/Users/mypcname/Desktop/screenrec/videos')

codec = cv2.VideoWriter_fourcc(*'XVID')
video_file = cv2.VideoWriter(os.getcwd()+ '\\' + 'VIDEO2' + '.avi', codec, 23.976, (1920, 1080))



def rec_loop():
    global rec, path_videos, path_frames, frame_number, codec, video_file
    while True:
        #takes BGR screenshot and makes it in a NumPy array
        capture = pyautogui.screenshot()
        frame = numpy.array(capture)

        #converts BGR screenshot into RGB
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)

        #shows the recording screen live
        cv2.imshow('REC', frame)
       video_file.write(frame)

        #cancel recording
        if cv2.waitKey(250) == ord('Q'):
            break
            cv2.destroyAllWindows()
            video_file.release()

rec_thread = threading.Thread(target=rec_loop)
rec_thread.start()

1 Ответ

2 голосов
/ 11 марта 2020

Пара вещей ...

  1. Вы, кажется, запускаете новый поток, а затем ничего не делаете параллельно, так что это якобы не очень разумно.

  2. Вы, вероятно, обнаружите, что pyautogui может захватывать только около 2-3 кадров в секунду, поэтому вы будете передавать их только с такой скоростью в видеопишущий, так что они будут казаться ускоренными. Вы можете захватить 2-10 кадров перед созданием выходного файла и рассчитать скорость, которую вы достигнете, и передать ее.

  3. Вы сможете добиться лучшей частоты кадров с ffmpeg, если это то, что вы хотите.

...