我想录制我的 OpenAIs 健身房推广视频。我使用 Monitor 类,但也感谢其他解决方案。这是我创建的一个最小示例,运行时没有异常或警告:
import gym
from gym.wrappers import Monitor
env = Monitor(gym.make('CartPole-v0'), './video', force=True)
state = env.reset()
done = False
while not done:
action = env.action_space.sample()
state_next, reward, done, info = env.step(action)
env.close()
这会将视频和一些元数据保存到 './video'
文件夹。但是,保存在那里的 mp4 文件始终只有 262 字节的大小,并且“文件不包含可播放的流”。所以它似乎是一个“视频”,但由 0 帧组成?我不明白问题是什么以及如何从这里调试。
答案 0 :(得分:2)
这实际上是一个已修复的错误 here
答案 1 :(得分:1)
请先确保您有 FFmpeg。
brew install ffmpeg
一种方法是在 Xvfd
虚拟显示器中运行代码。
这样做的原因是视频录制,这是通过对环境绘制的窗口进行截图来完成的。某些环境使用 OpenGL
来绘制其图片,因此需要存在带有 OpenGL
的图形模式。
对于云中的虚拟机来说,这可能是一个问题,它在物理上没有运行监视器和图形界面。为了克服这个问题,有一个特殊的“虚拟”图形显示,称为 Xvfb
(X11 virtual framebuffer
),它基本上在服务器上启动一个虚拟图形显示并强制程序在其中绘制。
要在 Xvfb
环境中启动您的程序,您需要在您的机器上安装它(这通常需要安装 xvfb 包)。
需要下载和设置的一些资源:
然后使用python文件运行xvfd-run
,视频应保存到您指定的目录:
xvfb-run -s "-screen 0 640x480x24" python cartpole_monitor.py
还有其他方法,例如在具有 OpenGL extension(GLX)
的 X11 会话中运行代码或在 X11
连接中使用 SSH
转发。