Временный файл Opencv VideoWriter

Я пытаюсь записать список изображений в видео mp4. Когда я использую VideoWriter для локального пути к файлу mp4, этот код работает отлично, и мой файл mp4 сохраняется на диск.

Однако мне нужно выполнить эту операцию на сервере, используя временный файл, чтобы затем отправить его в другие места. Чтобы протестировать использование временного файла, я просто меняю имя файла VideoWriter на file_out.name (через NamedTemporaryFile) и копирую на диск, чтобы убедиться, что он работает правильно. На выходе я получаю файл mp4 одинакового размера, но его нельзя открыть ни одним видеоплеером, поэтому с файлом должно быть что-то не так.

file_out = tempfile.NamedTemporaryFile(suffix='.mp4')

video = cv2.VideoWriter(file_out.name,cv2.VideoWriter_fourcc(*'avc1'),20,(width,height))

for i in range(len(images)):
    video.write(np.asarray(images[i]))

shutil.copy(file_out.name, '/path/to/test_output.mp4')

Что может происходить, из-за чего VideoWriter не может корректно записать в мой временный файл?

P.S. Моей первой попыткой было записать VideoWriter в BytesIO, чтобы затем отправить напрямую через http - это не сработало, поэтому я вернулся к временному файлу.


person david_jamieson_44    schedule 25.03.2020    source источник


Ответы (1)


РЕШЕНО:

Вывод VideoWriter ДОЛЖЕН быть освобожден, чтобы вывод скопированного файла был действительным.

video.release()

Это устраняет проблему.

person david_jamieson_44    schedule 27.03.2020