使用监视器录制 OpenAI 健身房视频

问题描述

我想录制我的 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 帧组成?我不明白问题是什么以及如何从这里调试。

解决方法

这实际上是一个已修复的错误 here

,

请先确保您有 FFmpeg

brew install ffmpeg

一种方法是在 Xvfd 虚拟显示器中运行代码。

这样做的原因是视频录制,这是通过对环境绘制的窗口进行截图来完成的。某些环境使用 OpenGL 来绘制其图片,因此需要存在带有 OpenGL 的图形模式。

对于云中的虚拟机来说,这可能是一个问题,它在物理上没有运行监视器和图形界面。为了克服这个问题,有一个特殊的“虚拟”图形显示,称为 Xvfb (X11 virtual framebuffer),它基本上在服务器上启动一个虚拟图形显示并强制程序在其中绘制。

要在 Xvfb 环境中启动您的程序,您需要在您的机器上安装它(这通常需要安装 xvfb 包)。

需要下载和设置的一些资源:

Link 1

Link 2

然后使用python文件运行xvfd-run,视频应保存到您指定的目录:

xvfb-run -s "-screen 0 640x480x24" python cartpole_monitor.py

还有其他方法,例如在具有 OpenGL extension(GLX) 的 X11 会话中运行代码或在 X11 连接中使用 SSH 转发。