как сохранить видео, хотя я убиваю процесс - PullRequest
0 голосов
/ 18 февраля 2019

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

    while True:
        frame, frame_id, time_video = next(self.distributor_frame)
        if frame is not None:
            self.out.write(frame)
        else:
            break

    self.out.release()

1 Ответ

0 голосов
/ 18 февраля 2019

Если вы просто хотите иметь возможность CTRL C из программы, вы можете перехватить встроенное в Python исключение KeyboardInterrupt и затем продолжить закрывать ресурс.

try:
    while True:
        frame, frame_id, time_video = next(self.distributor_frame)
        if frame is not None:
            self.out.write(frame)
        else:
            break
except KeyboardInterrupt:
    print('Stopped by keyboard interrupt')
self.out.release()

Обычно, если вы просто отправляете SIGINT ( CTRL C ), чтобы остановить скрипт, это вызовет исключение в Python, и это исключение будет вырезанопрограмма.Тем не менее, вы можете перехватить этот сигнал с помощью except KeyboardInterrupt и просто ничего не делать, то есть pass или print с каким-либо сообщением (как я) или с чем угодно.Но поскольку мы поймали исключение и больше не вызываем его, программа не завершает работу с прерыванием, находящимся внутри этого блока.


В качестве альтернативы можно создать подкласс (или создать класс, который включает в себя) VideoWriter и назначьте ему менеджер контекста --- тогда, даже если вы получите исключение, ресурс будет закрыт. В этом ответе есть хорошее обсуждение того, как создать контекстный менеджер самостоятельно.

...