Создание видео с использованием кадров в OpenCV

#python #opencv

Вопрос:

 def make_vid(file_path, frames, fps):  w,h ,l = frames[0].shape  fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')  writer = cv2.VideoWriter(file_path,fourcc, fps, (w, h))   for frame in frames:  writer.write(frame)   writer.release()   

Это моя функция создания видео с использованием кадров. Я ввожу видео и использую cv.read для чтения кадров. Затем я сохраняю его в кадрах [], а затем вызываю эту функцию, но видео, которое она создает, всегда повреждено. Не уверен, где я ошибаюсь.

Редактировать:

 ret, frame = capture.read() while ret:  frames.append(frame)  ret, frame = capture.read()  

вот как я читаю

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

1. Вы, конечно, не загружаете все кадры для всего видео в память, а затем передаете их этой функции??? Сколько у вас оперативной памяти? Как долго длится ваше видео?

2. покажите нам информацию о полученном файле. — прежде чем писать рамки, проверьте и убедитесь, что все они одинакового размера.

3. Я действительно удаляю некоторые кадры, но какое это имеет значение ?

4. Если ваше видео имеет разрешение 1080p со скоростью 30 кадров в секунду, для каждой секунды видео потребуется 1920x1080x3x30 или 180 МБ оперативной памяти. Вот почему я спросил вас, какой длины ваше видео и сколько у вас оперативной памяти.

5. У меня 16 ГБ оперативной памяти, а видео длится 1 минуту при 30 кадрах в секунду

Ответ №1:

Какого рода коррупцию вы видите? Вы проверили кадры, которые вы читаете? Есть ли у них какая-либо коррупция? Если вы поделитесь кодом, я, возможно, смогу вам помочь. Возможно, это проблема чтения кадров. Вот код для считывания видеокадров.

 frames=[] cap=cv2.VideoCapture('vid.mp4') while(cap.isOpened()):  ret,img=cap.read()  if ret==True:  frames.append(img)  else:   break  cap.release()  

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

1. это плохой код . ошибка-проверьте открытие и чтение этой видеозаписи

2. Пожалуйста, посмотрите правку сейчас

3. @ChristophRackwitz, Извини, я немного заржавел. Я кое-что изменил.

4. @HarshitGupta Может быть проблемой с чтением. Попробуйте использовать if ret: вместо while ret: и использовать while(capture.isOpened()): вне кода для чтения видео, который вы опубликовали выше