我想录制一段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帧组成?我不知道问题出在哪里,也不知道如何在这里调试。
发布于 2021-01-06 21:45:57
这实际上是一个修复了here的错误
发布于 2021-01-06 21:13:08
请确保您首先安装了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会话中运行代码,或者在SSH连接中使用X11转发。
https://stackoverflow.com/questions/65595244
复制相似问题