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

如何无需录屏将Python turtle绘图过程导出为视频适配headless系统

可实现的turtle绘图导出视频方案

核心思路

通过捕获turtle每一步绘制后的画布帧,直接将帧序列编码为视频,全程无需图形界面渲染,也不用任何录屏工具,可完美适配无界面云环境,还能完整保留实时绘制的全流程。

所需依赖

提前安装以下工具包:

  • Pillow:用于将turtle画布转换为图片帧
  • opencv-python:用于将图片帧合并为标准MP4视频
  • Linux云环境需要额外安装xvfb虚拟显示服务,本地Windows/macOS环境不需要

完整可运行代码

基于你提供的画圆示例改造,直接运行即可导出视频:

import os
import cv2
import turtle
from PIL import Image
import numpy as np

# 无界面环境前置配置,避免弹窗报错
os.environ['TK_SILENCE_DEPRECATION'] = '1'
if os.name == 'posix':
    os.system('Xvfb :1 -screen 0 1920x1080x24 &')
    os.environ['DISPLAY'] = ':1'

# 视频参数自定义配置
VIDEO_WIDTH = 800
VIDEO_HEIGHT = 600
FPS = 30
OUTPUT_VIDEO_PATH = 'turtle_draw_process.mp4'

# 初始化turtle画布
screen = turtle.Screen()
screen.setup(width=VIDEO_WIDTH, height=VIDEO_HEIGHT)
screen.tracer(0) # 关闭自动刷新,手动控制帧生成避免画面撕裂

tr = turtle.Turtle()
rad = 80

# 初始化视频写入器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(OUTPUT_VIDEO_PATH, fourcc, FPS, (VIDEO_WIDTH, VIDEO_HEIGHT))

def capture_current_frame():
    """捕获当前画布帧写入视频"""
    canvas = screen.getcanvas()
    # 把tk画布转PIL图像
    img = Image.frombytes('RGB', (canvas.winfo_width(), canvas.winfo_height()), canvas.postscript(colormode='color').encode('latin-1'))
    # 转OpenCV所需的BGR通道格式
    img_cv = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
    video_writer.write(img_cv)

# 拆分圆形绘制为多步,每步捕获一帧还原绘制过程
for angle in range(0, 361, 2):
    tr.circle(rad, extent=2)
    screen.update()
    capture_current_frame()

# 释放资源
video_writer.release()
turtle.bye()

注意说明

  • 如果你有自定义的复杂绘制逻辑,只需要在每一步绘制动作执行、调用screen.update()后,调用capture_current_frame()即可,不需要改动原有绘制逻辑
  • 可以通过调整FPS参数控制视频播放速度,调整绘制步长控制绘制过程的流畅度
  • 最终生成的是标准MP4格式视频,兼容所有主流播放器

内容的提问来源于stack exchange,提问作者Alberto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 20:18:01