Я пытаюсь преобразовать файл mp4 с разрешением 1920x1080p в файлы с разрешением 1280x720 и 720x480, и сценарий создает файлы, но содержимое файлов неверное. Размер файла 1280x720 огромен (98 МБ, тогда как исходный файл - всего 15 МБ), он ровно в два раза больше исходного файла, и он зацикливает первый файл. Второй файл очень маленький (185 КБ и не может быть открыт с помощью Quick Time Player. Я пробовал много вещей, например, перемещал инструкции и различные повторяющиеся циклы, но ни один из них не работал. Скрипт не показывает никаких сообщения об ошибках, поэтому я действительно не знаю, что является причиной этой неисправности. Заранее благодарим за любую помощь! Вот мой код:
import cv2
import numpy as np
from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw()
movFile = askopenfilename()
movCap = cv2.VideoCapture(movFile)
movWidth = movCap.get(cv2.CAP_PROP_FRAME_WIDTH )
movHeight = movCap.get(cv2.CAP_PROP_FRAME_HEIGHT )
movFPS = movCap.get(cv2.CAP_PROP_FPS)
print ('The width of the video is:', movWidth)
print ('The height of the video is:', movHeight)
print ('The FPS of the video is:', movFPS)
fourcc = cv2.VideoWriter_fourcc(*'M','J','P','G')
os.chdir ('/Users/garrettanderson/Documents/internship-project/Python_Scripts')
if movWidth <= 1920 and movHeight <= 1080:
repeatNum = 1
resizeWidth = 1280
resizeHeight = 720
movName = 'movResize1280x720.mov'
for repeatNum in range (2):
print(resizeWidth, resizeHeight, repeatNum)
movOut = cv2.VideoWriter(movName, fourcc, 30, (resizeWidth,resizeHeight))
while True:
ret, frame = movCap.read()
if ret == True:
b = cv2.resize(frame,(resizeWidth,resizeHeight),fx=0,fy=0, interpolation = cv2.INTER_CUBIC)
movOut.write(b)
else:
break
resizeWidth = 720
resizeHeight = 480
movName = 'movResize720x480.mov'
print (movCap)
print (movOut)
movCap.release()
movOut.release()
cv2.destroyAllWindows()
print ('File resized and converted')```