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

如何将PIL处理后的图像通过FFMPY导入FFMPEG保存为GIF或视频

使用FFMPY将PIL处理后的图像直接转视频/GIF(无中间文件)

要实现不生成中间图像文件,直接将PIL处理后的图像通过FFMPY传给FFmpeg编码为视频/GIF,需要完成以下核心步骤:

关键配置与操作步骤

  • 统一输入帧参数:FFmpeg要求所有输入帧的分辨率、像素格式必须一致,处理PIL图像时要先统一尺寸和色彩模式(比如转为RGB/RGBA)。
  • 配置FFmpeg从标准输入读取:将FFMPY的输入设为'-'(代表标准输入),同时通过输入参数告知FFmpeg输入数据的格式、分辨率、帧率等关键信息。
  • 通过管道传输二进制数据:将PIL图像转为原始二进制像素数据,逐个写入FFmpeg的标准输入管道,完成后关闭管道触发编码完成。

完整代码示例

import ffmpy
import subprocess
from PIL import Image

# 1. 加载图像并执行PIL处理
images = [Image.open('frame 1.png'), Image.open('frame 2.png')]
# 示例处理:统一调整分辨率+转为RGB格式(根据需求修改)
target_resolution = (640, 480)
processed_frames = [img.resize(target_resolution).convert('RGB') for img in images]

# 2. 定义FFmpeg基础参数
frame_width, frame_height = target_resolution
fps = 10  # 输出帧率
input_pix_fmt = 'rgb24'  # 对应RGB模式的像素格式

# 3. 配置FFMPY实例
ff = ffmpy.FFmpeg(
    inputs={
        '-': f'-f rawvideo -pix_fmt {input_pix_fmt} -s {frame_width}x{frame_height} -r {fps}'
    },
    outputs={
        'output.gif': f'-f gif -r {fps}'  # 若输出MP4,可改为'output.mp4': '-c:v libx264 -pix_fmt yuv420p -r {fps}'
    },
    executable='ffmpeg\\bin\\ffmpeg.exe'
)

# 4. 启动异步进程并传输数据
process = ff.run_async(stdin=subprocess.PIPE)
for frame in processed_frames:
    # 将PIL图像转为原始二进制数据写入管道
    process.stdin.write(frame.tobytes())

# 关闭输入管道,通知FFmpeg数据传输完成
process.stdin.close()
# 等待编码进程结束
process.wait()

注意事项

  • 如果处理的是带透明通道的图像(RGBA模式),需将input_pix_fmt改为rgba,同时保证输出格式支持透明(比如GIF支持,MP4需用特定编码器)。
  • 必须确保所有处理后的帧分辨率完全一致,否则FFmpeg会抛出编码错误。
  • 调整fps参数可以控制视频/GIF的播放速度。

内容的提问来源于stack exchange,提问作者Lion In A Box

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:38:14