OpenCV VideoWriter не записывает данные в файл Output.avi - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь написать простой фрагмент кода, который берет видео, обрезает его и записывает в выходной файл.

Настройка системы:

OS: Windows 10
Conda Environment Python Version: 3.7
OpenCV Version: 3.4.2
ffmpeg Version: 2.7.0

Параметры ввода файла:

Codec: H264 - MPEG-4 AVC (part 10)(avc1)
Type: Video
Video resolution: 640x360
Frame rate: 5.056860

Код не может произвести вывод (он создает файл, но не записывает в него):

import numpy as np
import cv2

cap = cv2.VideoCapture('croptest1.mp4')

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc('F', 'M', 'P', '4')
out = cv2.VideoWriter('output.avi', fourcc, 20.0,
                      (int(cap.get(3)), int(cap.get(4))))

# Verify input shape
width = cap.get(3)
height = cap.get(4)
fps = cap.get(5)
print(width, height, fps)

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret == True:
        # from top left =frame[y0:y1, x0:x1]
        cropped_frame = frame[20:360, 0:640]

        # write the clipped frames
        out.write(cropped_frame)

        # show the clipped video
        cv2.imshow('cropped_frame', cropped_frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

Вариации в fourcc и из переменных пытались заставить кодек работать:

fourcc = cv2.cv.CV_FOURCC(*'DIVX')
fourcc = cv2.VideoWriter_fourcc(*'DIVX')

out = cv2.VideoWriter('ditch_effort.avi', -1, 20.0, (640, 360))

На основании этой ссылки Я смогу обратиться к этому списку ссылок fourcc , чтобы определить подходящий код сжатия fourcc для использования.Я перепробовал несколько вариантов, но не могу получить выходной файл для записи.Когда я запускаю код, переменные формы ввода #verify печатают соответствующие 640, 360 и правильную частоту кадров.

Может кто-нибудь сказать мне, в чем моя проблема ... будет очень признателен.

1 Ответ

0 голосов
/ 18 февраля 2019

Причиной ошибки являются различия между размером cropped_frame (640,340) и размером, объявленным в writer (640,360).

Так писатель должен быть:

out = cv2.VideoWriter('output.avi', fourcc, 20.0,(640,340))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...