Python 3.5.2, anaconda 4.2.0 на Windows 10. OpenCV установлен с conda
, версия 3.1.0.opencv и python 3 - невозможно записать видеокадры на диск
Я пытаюсь обрабатывать видеофайл, открывая его, преобразуя каждый кадр и помещая результат в новый видеофайл. Выходной файл создан, но размер около 800 байт и его пустой. Входной файл имеет ~ 4000 кадров и составляет около 150 МБ.
Вот мой код, который следует за руководством по документации OpenCV довольно близко.
import cv2
import progressbar
# preprocess video
# args.input is a valid file name
outname = 'foo.mp4'
cap = cv2.VideoCapture(args.input)
codec = int(cap.get(cv2.CAP_PROP_FOURCC))
framerate = app_config.camera.framerate #240
size = (app_config.camera.width, app_config.camera.height) #1080 x 720
vw = cv2.VideoWriter(filename=outname, fourcc=codec, fps=framerate, frameSize=size, isColor=False)
curframe = 0
with progressbar.ProgressBar(min_value=0, max_value=int(cap.get(cv2.CAP_PROP_FRAME_COUNT))) as pb:
while cap.isOpened():
ret, frame = cap.read()
if ret:
#update the progress bar
curframe += 1
pb.update(curframe)
# convert to greyscale
grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# invert colors
inverted = cv2.bitwise_not(grey)
vw.write(inverted)
#cv2.imshow('right', right)
#if cv2.waitKey(1) & 0xFF == ord('q'):
# break
else:
break
cap.release()
vw.release()
cv2.destroyAllWindows()
Я получаю следующее сообщение об ошибке:
OpenCV: FFMPEG: tag 0x7634706d/'mp4v' is not supported with codec id 13 and format 'mp4/MP4 (MPEG-4 Part 14)'
OpenCV: FFMPEG: fallback to use tag 0x00000020/' ???'
Я получаю подобные ошибки (а также предупреждение, что у меня есть неверной переменной среды для пути библиотек h.264), если я пытаюсь установить codec = cv2.VideoWriter_fourcc(*'H264')
,
Что вы получаете, когда вводите «cv2 .__ version__», чтобы убедиться, что вы загрузили правильный opencv. Кроме того, вы уверены, что с и высота "foo.mp4" стоят 1080 * 720? Если нет, он напишет пустой видеофайл. Если они не работают, попробуйте реализовать «fourcc = cv2.VideoWriter_fourcc ('m', 'p', '4', 'v')", "video = cv2.VideoWriter()", "video.open (outname, четыре точки, частота кадров, размер, ложь. Надеюсь, это поможет! – crazjo