使用MoviePy的ffmpeg_movie_from_frames遇TypeError错误求助
解决MoviePy ffmpeg_movie_from_frames的TypeError问题
错误原因
你遇到的TypeError: %d format: a real number is required, not str,是因为ffmpeg_movie_from_frames函数内部构造FFmpeg命令时,对帧率参数使用了整数格式化规则(%d),而你传入的60.0是浮点数,或在部分版本中参数被意外转换为字符串,导致格式化失败。
解决方案
方案1:将帧率改为整数
直接把fps从60.0改为整数60,适配函数内部的格式化要求:
from moviepy.video.io.ffmpeg_tools import ffmpeg_movie_from_frames input_folder = r"C:\Users\lenovo\Desktop\dist\images" output_file = r"C:\Users\lenovo\Desktop\dist\v.mp4" fps = 60 # 改为整数 ffmpeg_movie_from_frames(output_file, input_folder, fps)
方案2:使用更稳定的ImageSequenceClip(推荐)
ffmpeg_movie_from_frames属于底层工具,不如ImageSequenceClip易用且稳定,后者能更好地处理图片序列,支持浮点数帧率:
from moviepy.editor import ImageSequenceClip import os input_folder = r"C:\Users\lenovo\Desktop\dist\images" output_file = r"C:\Users\lenovo\Desktop\dist\v.mp4" fps = 60.0 # 按文件名排序获取所有图片文件(确保序列顺序正确) image_paths = sorted( [os.path.join(input_folder, f) for f in os.listdir(input_folder) if f.endswith(('.png', '.jpg', '.jpeg'))], key=lambda x: int(os.path.splitext(os.path.basename(x))[0]) # 假设图片按数字命名,如0001.png、0002.png ) # 创建图片序列剪辑并导出视频 clip = ImageSequenceClip(image_paths, fps=fps) clip.write_videofile(output_file, codec="libx264")
注意:如果你的图片命名不是纯数字序列,需要调整排序逻辑以保证视频帧顺序正确。
内容的提问来源于stack exchange,提问作者user22731523
相关产品推荐
相关产品推荐

