python сгенерировать 5-ти секундное mp4 видео из одного фото
как при помощи python сгенерировать из одного фото (jpg) видео (mp4) длиной 5 секунд?
Я пробовал movepy и FFmpeg, но на выходе получается серое видео
from moviepy.editor import *
files = ['1.jpg', '1.jpg']
clip = ImageSequenceClip(files, fps = 4)
clip.write_videofile("video.mp4", fps = 24)
Ответы (1 шт):
Автор решения: Johan
→ Ссылка
Попробуйте сделать вот так:
from moviepy.editor import *
def clip_from_image(image, name_clip, s_duration):
"""
:param image: путь к изображению
:param name_clip: имя результирующего видео mp4
:param s_duration: время длительности клипа в секундах
:return: выход из функции
"""
try:
dur = float(s_duration)
except ValueError:
print('[-] Неверное значение длительности кадра')
return
print('[+] Создание видео')
clips = ImageClip(image).set_duration(dur)
clips.write_videofile(f'{name_clip}.mp4', fps=25)
return
clip_from_image(image='test.jpg', name_clip='123', s_duration=5)
А так можно с помощью OpenCV:
import cv2
import numpy as np
from PIL import Image
def img_to_mp4(path_img: str, vid_name: str, dur: int):
"""
:param path_img: путь к изображению
:param vid_name: имя результирующего видео mp4
:param dur: время длительности клипа в секундах
"""
img = Image.open(path_img)
f_rate = 30.0
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out_scr = cv2.VideoWriter(f"{vid_name}.mp4", fourcc, f_rate, (img.width, img.height))
for im in range(0, dur*int(f_rate)):
frame = np.array(img)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
out_scr.write(frame)
img_to_mp4(path_img='X2Q6dQuRLw4.jpg', vid_name='123', dur=5)