Как получить openCV, чтобы сохранить изменения, которые он вносит в видео - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь написать программу, которая изменяет размеры всех видео с 448x800 до 480x640 в наборе каталогов, но по какой-то причине OpenCV не выполняет изменения, несмотря на отсутствие ошибок. Я использую OpenCV 4.1.0 и Python 3.7. Когда я запускаю mediainfo для отдельных файлов, разрешение отображается одинаково. Я запускаю его на Ubuntu, если это что-то меняет.

Из того, что я могу сказать из операторов печати, он достаточно хорошо изменяет размеры отдельных кадров, но проблема заключается в том, чтобы сохранить готовое видео.

import cv2
import os

dirs = ['group 3','group 4','group 5','group 6','group 7','group 8']

#cycles through the directories
for i in dirs:
    files = os.listdir(i)
    print (i)
    #cycles through the files in each directory
    for j in files:
        if j.endswith('.avi'):
            cap = cv2.VideoCapture(i + '/' + j)
            fourcc = cv2.VideoWriter_fourcc(*'XVID')
            out = cv2.VideoWriter('output.avi', fourcc, 15, (640, 480))
            while True:
                ret, frame = cap.read()
                if ret==True:
                    print(frame.shape)
                    b = cv2.resize(frame, (640,480), fx=0, fy=0, interpolation = cv2.INTER_CUBIC)
                    out.write(b)
                    print(b.shape)
                else:
                    break
            cap.release()
            out.release()
            cv2.destroyAllWindows()

Это не вызывает ошибок, но фактически не изменяет файлы. Какие-нибудь мысли? Я скучаю по чему-то простому?

1 Ответ

1 голос
/ 10 июля 2019

Строка out = cv2.VideoWriter('output.avi', fourcc, 15, (640, 480)) определяет средство записи видео, которое будет записывать в файл с именем output.avi в вашем рабочем каталоге. Поскольку вы всегда используете одно и то же имя файла, результатом будет последнее найденное видео с измененным размером.

Чтобы это исправить, просто измените приведенную выше строку на: out = cv2.VideoWriter(j.replace(".avi", "_resized.avi", fourcc, 15, (640, 480))

Затем получит имена файлов, например myvideo_resized.avi, где «myvideo» является примером старого имени файла.

Также, если вы хотите правильно проверить, является ли файл видеофайлом, попробуйте this .

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...