You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 02:46:02