Python OpenCV неправильно возвращает последний кадр

#python #opencv #video

Вопрос:

Я пытаюсь получить последний кадр видео mp4 с помощью OpenCV. Этот код работает для некоторых видео и не работает для других. Я полагаю, что это как-то связано с частотой кадров видео, но я не совсем уверен. Попытка использовать cv2.CAP_PROP_POS_MSEC свойство вместе с продолжительностью видео также не сработала. Частота кадров видео составляет 27,75 кадров в секунду.

 def createsample(self, videopath) -> str:
        """Gets the last frame of the video as a sample."""

        cap = cv2.VideoCapture(videopath)
        sample = COGSPATH   r"datasample.jpg"
        
        cap.set(cv2.CAP_PROP_POS_FRAMES, cap.get(cv2.CAP_PROP_FRAME_COUNT) - 1) #should set last frame
        ret, frame = cap.read()
            
        cv2.imwrite(sample, frame)
        cap.release()
        cv2.destroyAllWindows()
        return sample
 

После этого кода, frame как правило, просто пусто и ret есть False .

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

1. все та же старая история. искать — это сложно. не полагайтесь на это. используйте библиотеки ffmpeg напрямую. OpenCV-это библиотека для компьютерного зрения, а не для обработки видеофайлов.

2. @DeepQuantum У вас есть пример видео, которым вы можете поделиться, где вы столкнулись с этой проблемой?