Как прочитать определенные кадры из видео с помощью OpenCV Cuda Video Reader в Python? ⇐ C++
Как прочитать определенные кадры из видео с помощью OpenCV Cuda Video Reader в Python?
Я скомпилировал OpenCV 4.8.0 с Cuda 10.2, cudNN 7.6.5.32, Video_Codec_SDK_12.1.14 и запускаю его на Python 3.9.13. Я пытаюсь прочитать определенные кадры из видеофайла (video.mkv) с помощью OpenCV Cuda Video Reader, аналогично тому, как я это делаю с помощью VideoCapture на базе ЦП.
Вот как я бы это сделал с помощью VideoCapture:
cap.set(cv2.CAP_PROP_POS_FRAMES, target_frame) Для Cuda Video Reader у меня сейчас работает этот код:
video_reader = cv2.cudacodec.createVideoReader('video.mkv') fps_received, fps = video_reader.get(cv2.CAP_PROP_FPS) total_frames_received, total_frames = video_reader.get(cv2.CAP_PROP_FRAME_COUNT) для секунды в диапазоне (1, int(total_frames // fps) + 1): target_frame = int (секунда * кадр в секунду) # TODO: прочитать только целевой_фрейм и пропустить остальное Я ознакомился со справкой по VideoReader API и попытался использовать метод set(), в котором я могу передать VideoReaderPropertys. Единственным свойством, которое имело для меня смысл, было PROP_DECODED_FRAME_IDX, которое описано как «Индекс для получения декодированного кадра с помощью метода извлечения()».
set_success = video_reader.setVideoReaderProps(propertyId=0, propertyVal=target_frame) #PROP_DECODED_FRAME_IDX print(set_success) # Это всегда ложь has_frame, кадр = video_reader.nextFrame() [*]Как прочитать определенный кадр видео с помощью Cuda Video Reader? [*]Есть ли свойство, похожее на CAP_PROP_POS_FRAMES, для версии Cuda?
Я скомпилировал OpenCV 4.8.0 с Cuda 10.2, cudNN 7.6.5.32, Video_Codec_SDK_12.1.14 и запускаю его на Python 3.9.13. Я пытаюсь прочитать определенные кадры из видеофайла (video.mkv) с помощью OpenCV Cuda Video Reader, аналогично тому, как я это делаю с помощью VideoCapture на базе ЦП.
Вот как я бы это сделал с помощью VideoCapture:
cap.set(cv2.CAP_PROP_POS_FRAMES, target_frame) Для Cuda Video Reader у меня сейчас работает этот код:
video_reader = cv2.cudacodec.createVideoReader('video.mkv') fps_received, fps = video_reader.get(cv2.CAP_PROP_FPS) total_frames_received, total_frames = video_reader.get(cv2.CAP_PROP_FRAME_COUNT) для секунды в диапазоне (1, int(total_frames // fps) + 1): target_frame = int (секунда * кадр в секунду) # TODO: прочитать только целевой_фрейм и пропустить остальное Я ознакомился со справкой по VideoReader API и попытался использовать метод set(), в котором я могу передать VideoReaderPropertys. Единственным свойством, которое имело для меня смысл, было PROP_DECODED_FRAME_IDX, которое описано как «Индекс для получения декодированного кадра с помощью метода извлечения()».
set_success = video_reader.setVideoReaderProps(propertyId=0, propertyVal=target_frame) #PROP_DECODED_FRAME_IDX print(set_success) # Это всегда ложь has_frame, кадр = video_reader.nextFrame() [*]Как прочитать определенный кадр видео с помощью Cuda Video Reader? [*]Есть ли свойство, похожее на CAP_PROP_POS_FRAMES, для версии Cuda?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как передавать кадры один за другим и захватывать декодированные кадры с помощью LibAV?
Anonymous » » в форуме C# - 0 Ответы
- 27 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Преобразуйте java.io.Reader в другой Reader, пропустив чтение некоторых символов.
Anonymous » » в форуме JAVA - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Преобразуйте java.io.Reader в другой Reader, пропустив чтение некоторых символов.
Anonymous » » в форуме JAVA - 0 Ответы
- 30 Просмотры
-
Последнее сообщение Anonymous
-