2017-02-17 51 views
0

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') ,

+0

Что вы получаете, когда вводите «cv2 .__ version__», чтобы убедиться, что вы загрузили правильный opencv. Кроме того, вы уверены, что с и высота "foo.mp4" стоят 1080 * 720? Если нет, он напишет пустой видеофайл. Если они не работают, попробуйте реализовать «fourcc = cv2.VideoWriter_fourcc ('m', 'p', '4', 'v')", "video = cv2.VideoWriter()", "video.open (outname, четыре точки, частота кадров, размер, ложь. Надеюсь, это поможет! – crazjo

ответ

0

Убедитесь, что размеры inverted соответствуют размерам параметра size в определении videoWriter.

Также используйте кодек 'M','P','4','V' с контейнером .mp4.