#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()):
вне кода для чтения видео, который вы опубликовали выше