видео в изображения, затем изображения в видео в python

Я пытаюсь преобразовать следующее видео в изображения https://www.signingsavvy.com/media/mp4-ld/24/24851.mp4 однако я сделал это с помощью OpenCV

# Importing all necessary libraries 
import cv2 
import os 

# Read the video from specified path 
cam = cv2.VideoCapture("C:\Users\ahmad\Hi_ASL.mp4")
print(cam.get(cv2.CAP_PROP_FPS))
try: 

# creating a folder named data 
    if not os.path.exists('data'): 
        os.makedirs('data') 

# if not created then raise error 
except OSError: 
    print ('Error: Creating directory of data') 

# frame 
currentframe = 0

while(True): 

    # reading from frame 
    ret,frame = cam.read() 

    if ret: 
        # if video is still left continue creating images 
        name = './data/frame' + str(currentframe) + '.jpg'
#         print ('Creating...' + name) 

        # writing the extracted images 
        cv2.imwrite(name, frame) 

        # increasing counter so that it will 
        # show how many frames are created 
        currentframe += 1
    else: 
        break
#     ret,frame = cam.read() 

# Release all space and windows once done 
cam.release() 
cv2.destroyAllWindows()

После того, как я это сделал. Я хочу преобразовать эти изображения в видео, как показано выше, и я написал этот код

img = [img for img in os.listdir('data')]
frame = cv2.imread('data\' + img[0])
h , w , l = frame.shape
vid = cv2.VideoWriter('hiV.mp4' , 0 ,1 ,(w,h))

for imgg in img:
    vid.write(cv2.imread('data\' + imgg))

cv2.destroyAllWindows()
vid.release()

Проблема в том, что результат объединения изображений в видео с использованием OpenCV не совпадает с исходным видео. Так в чем проблема? Я хочу, чтобы он был таким же, как оригинал. Результатом приведенного выше кода является это видео https://drive.google.com/file/d/16vwT35wzc95tBleK5VCpZJQkaLxSiKVd/view?usp=sharing

И спасибо.


person Ahmad Almosallam    schedule 23.10.2020    source источник


Ответы (1)


Вы должны изменить cv2.VideoWriter('hiV.mp4' , 0 ,1 ,(w,h)) на cv2.VideoWriter('hiV.mp4' , 0 ,30 ,(w,h)), поскольку 1 устанавливает частоту кадров, а это означает, что вы записываете 1 кадр в секунду, а не 30 или 29,97 (NTSC), как исходное видео.

person bas.cmd    schedule 23.10.2020
comment
Да, я сделал это, прежде чем опубликовать вопрос, но то же самое. это не похоже на оригинал. это близко, но не то же самое. Итак, я был бы признателен, если бы у вас было другое решение. Спасибо за ваш вклад. - person Ahmad Almosallam; 23.10.2020
comment
Можете ли вы отправить, какой результат вы получите, когда вы изменили значение? - person bas.cmd; 23.10.2020
comment
конечно 1 мин пожалуйста. - person Ahmad Almosallam; 23.10.2020
comment
drive.google.com/file/d/1QmdIlqz9DPrIn6k-5f9xhcFeYy7dQGsj/ Поехали - person Ahmad Almosallam; 23.10.2020
comment
У меня тоже такое странное заикание. Я также пробовал разные кодеки, но это не решило проблему. - person bas.cmd; 23.10.2020
comment
После того, как я подумал об отладке, я обнаружил, что это то, как вы храните файлы и как их читает Python. Цикл python for читает его следующим образом: frame0 = frame 0 frame1=frame 10 и frame10 = 10, и то же самое касается frame2 = frame 20 и frame20 = frame 20. В то время как frame01 = frame 1 и frame02 = frame 2. Таким образом, вы либо нужно посмотреть, как вы храните или читаете файлы кадров. - person bas.cmd; 25.10.2020
comment
Хм, я тебя плохо понял - person Ahmad Almosallam; 26.10.2020
comment
Таким образом, ваш цикл for считывает кадры в неправильном порядке, например: ibb.co/9mDHFmT имена фреймов, которые имеют от 1 числа до 1 числа и 0 впереди, например: 01. Затем он читает их в правильном порядке, например так: ibb.co/mSZ5njq - person bas.cmd; 26.10.2020
comment
yesss я понимаю, что вы имеете в виду знаю!! Спасибо, сделаю, посмотрю что будет - person Ahmad Almosallam; 27.10.2020