Как избежать задержки видео при записи с использованием OpenCV2?

#opencv #image-processing #video-processing #frame-rate #opencv-python

#opencv #обработка изображений #обработка видео #частота кадров #opencv-python

Вопрос:

Когда я пытаюсь просто прочитать и записать видео с помощью OpenCV2, в видео появляется задержка в 1,033 раза — например, исходное видео продолжительностью 3: 17мин становится 3:24мин в выходном видео, 19:00мин становится 19:38мин. Я что-то делаю не так?

Частота кадров в секунду (29) и количество кадров остаются неизменными при вводе и выводе видео. (Я пытаюсь выполнить распознавание лиц, но сначала пытаюсь выяснить задержку)

 input_movie = cv2.VideoCapture(video_under_analysis)
length = int(input_movie.get(cv2.CAP_PROP_FRAME_COUNT))
width, height = (
        int(input_movie.get(cv2.CAP_PROP_FRAME_WIDTH)),
        int(input_movie.get(cv2.CAP_PROP_FRAME_HEIGHT))
    )
fps = int(input_movie.get(cv2.CAP_PROP_FPS))
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
output_movie = cv2.VideoWriter()
output_file_name = "output.mp4"

# Define the codec and create VideoWriter object
output_movie.open(output_file_name, fourcc, fps, (width, height), True)
frame_number = 0
FRAME_LIMIT = length
while True:
    ret, frame = input_movie.read()
    frame_number  = 1
    
    if not ret or frame_number > FRAME_LIMIT:
        break
    
    if frame is not None:
      output_movie.write(frame)

update_progress(1)
output_movie.release()
input_movie.release()

cv2.destroyAllWindows()
 

Комментарии:

1. Что FRAME_LIMIT это? Это length ?

2. Да, это длина, обновит вопрос

3. Как вы проверяете длину видео?

4. Я проверяю количество кадров — output_movie='output.mp4'; output_movie = cv2.VideoCapture(output_movie); output_movie.get(cv2.CAP_PROP_FRAME_COUNT) и получаю те же цифры

5. Я имел в виду, как вы проверяете длительность видео.

Ответ №1:

Я думаю, что проблема может быть в этой строке

 fps = int(input_movie.get(cv2.CAP_PROP_FPS))
 

Вы преобразуете float значение в int . Частота кадров в секунду вашего входного видео может быть float примерно 29,9, которая преобразуется в 29. Следовательно, постоянная задержка.

Комментарии:

1. МАССОВОЕ упущение! Я почти дошел до пропуска кадров, чтобы предотвратить задержку звука. Большое спасибо, что указали на это!