#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.