Обрезать (удалить кадры из) видео в реальном времени с веб-камеры с помощью python

#python #ffmpeg #video-streaming #video-processing #video-capture

#python #ffmpeg #потоковое видео #обработка видео #захват видео

Вопрос:

У меня есть веб-камера, которая захватывает видеопоток. Через 30 секунд я хочу удалить 1 секунду видео с самого начала и продолжить захват видеопотока и так далее. Короче говоря, я хочу сохранить только последние 30 секунд видео в реальном времени.

OpenCV не обеспечивает обработку видео

ffmpeg обрезает видео, но создает новый выходной файл, я не хочу сохранять копии.

 #Create a video write before entering the loop
#Create a video write before entering the loop
video_writer = cv2.VideoWriter(
    video_file, video_codec, fps, (int(cap.get(3)), int(cap.get(4)))
)

#video_file is the file being saved

start = time.time()
i=0
seconds='1'
while cap.isOpened():


    ret, frame = cap.read()
    if ret == True:
        cv2.imshow("frame", frame)
        if time.time() - start > 10:
            print('video > 10 sec')
        
            subprocess.call(['ffmpeg', '-i', video_file, '-ss', seconds, 'output.avi'])
            break

    # Write the frame to the current video writer
    video_writer.write(frame)
    if i%24 == 0:
        cv2.imwrite('image' str(i) '.jpg',frame)
    i =1
    if cv2.waitKey(1) amp; 0xFF == ord("q"):
        break
else:
    break
cap.release()
cv2.destroyAllWindows()
  

Я ищу, как мы можем отключить видео в реальном времени и сохранить будущие кадры, чтобы видео не превышало 30 секунд и сохраняло последние кадры.

Ответ №1:

Вы можете использовать сегментный мультиплексор:

 ffmpeg -i input -f segment -segment_time 30 -segment_wrap 2 -reset_timestamps 1 output_%d.avi
  

Это создаст два файла: output_0.avi и output_1.avi . Каждые 30 секунд вывод будет чередоваться между этими файлами и перезаписывать более ранние версии.

Вы могли бы использовать -segment_wrap 1 и выводить только 1 файл, но вы рискуете потерять видео. Например, остановка записи на 32 секундах приведет к получению 2-секундного видео вместо 30-секундного видео 2-секундное видео.

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

1. можете ли вы внести изменения в вышеуказанную программу, я не могу получить вывод с помощью segment muxer

2. @MuhammadUsman Я могу предоставить только команду ffmpeg. Я не использую python. Вопрос касается использования ffmpeg, а не реализации в python. Вы можете задать новый вопрос о том, как заставить команду работать в коде Python.