Невозможно демультиплексировать поток из видео, созданного Py OpenCV - PullRequest
0 голосов
/ 15 февраля 2020

Я пытаюсь использовать OpenCV для создания видео из отдельных кадров. Хотя код работает без ошибок, я не могу воспроизвести полученный файл AVI. Когда я это делаю, я получаю ошибку Could not demultiplex stream.

Сокращенная версия кода, который я использую для этого: размер, ожидаемый cv2.VideoWiter и что у меня есть правильные кодеки. Я изменил размеры своих изображений, чтобы убедиться, что они имеют правильный размер, и я попробовал несколько разных кодеков. Я также пытался установить стандартные кодеки, используя некоторые apt-get install команды, которые я также нашел в Googling:

me@balin:~$ sudo apt update
me@balin:~$ sudo apt install libdvdnav4 libdvdread4 gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly libdvd-pkg
me@balin:~$ sudo apt install ubuntu-restricted-extras

Я сейчас использую:

Ubuntu 18.04
Python 2.7.17
cv2.__version__ 4.0.1

1 Ответ

0 голосов
/ 15 февраля 2020

Я думаю, что ваша проблема в неправильном использовании fnmatch.filter(), который не получает имена файлов из папки, а используется только для проверки соответствия имени файла.

См. Пример из fnmatch

import fnmatch
import os

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, '*.txt'):
        print(file)

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

Но вы можете использовать glob.glob() для этого

image_list = glob.glob('./sample/images/*.png')

Этот код работает для меня

import cv2
import glob

image_list = glob.glob('./sample/images/*.png')
image_list.sort()
#print(image_list)

codec = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
video = cv2.VideoWriter('./movieT.avi', codec, 20, (289, 289))

for img_name in image_list:
    img = cv2.imread(img_name)
    img = cv2.resize(img, (289, 289))
    video.write(img)

video.release()
...