如果有人在排序加载的图像时遇到困难,以下是一个使用内置的sorted(os.listdir(image_folder)
)函数的版本,作为额外的贡献。
import os
import moviepy.video.io.ImageSequenceClip
from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
image_folder='frames'
fps=10
image_files = [os.path.join(image_folder,img)
for img in sorted(os.listdir(image_folder))
if img.endswith(".png")]
print(image_files)
clip = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(image_files, fps=fps)
clip.write_videofile('myvideo.mp4')
然而,请注意它依赖于文件系统/文件名,并且会错误地排序数字(1,10,2,3…)。下面是另一种解决方案,使用一个名为
sorted_alphanumeric(data)
的函数来解决这个问题(来自另一个
thread)。
import os
import moviepy.video.io.ImageSequenceClip
from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
image_folder='frames'
fps=10
import re
def sorted_alphanumeric(data):
convert = lambda text: int(text) if text.isdigit() else text.lower()
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ]
return sorted(data, key=alphanum_key)
image_files = [os.path.join(image_folder,img)
for img in sorted_alphanumeric(os.listdir(image_folder))
if img.endswith(".png")]
print(image_files)
clip = moviepy.video.io.ImageSequenceClip.ImageSequenceClip(image_files, fps=fps)
clip.write_videofile('myvideo.mp4')
cv2.VideoWriter
期望的尺寸顺序是宽度然后是高度,这与大多数其他cv2
函数不同。 - pellucidcoder