我正在运行无头 Raspberry Pi,并且希望将控制台/终端输出转换为单个 jpeg 或视频流。
例如:pbytop
每隔几秒捕获一次输出,并使用 mjpeg(或通过 ffmpeg 作为 h264 流)将其流式传输到网站。
我只是停留在 jpeg/视频捕获部分,将该媒体从 pi 流式传输到网站。
我设法得到的最接近的是:
- ssh 进入 pi
- 开始
tmux
pbytop
在 tmux 内部启动- 从第二个虚拟终端 ssh 到 pi
- 将 tmux 窗格捕获到 txt 文件中:
-
tmux capture-pane -J -p -t %0 > /tmp/pane-plain-text.txt
-
tmux capture-pane -e -J -p -t %0 > /tmp/pane-with-colors.txt
- 然后我就可以了
cat /tmp/pane-with-colours.txt
,它看起来很完美,但是这仍然只是一个 txt 文件,里面有一堆颜色转义序列,而不是图像。
在我走上“ascii to image”之路之前,有人可以给我指出一个更好的方向吗?
我觉得我可以通过组合/dev/fb0
并将其提取到流中来完成一些操作ffmpeg -f fbdev -i /dev/fb0 etc...
答案1
对于 ascii 到图像,请使用 image magick 或 xwd 来捕获终端窗口的内容。
您可以在桌面上执行此操作或在虚拟 X11 会话中运行它(使用 Xvfb)
当您想跳过文本步骤时,您可以只在虚拟 X11 中运行原始 pbytop 并从那里捕获图像。
如果您需要与 xvfb 交互,您可能必须使用 xnee 或 xdotool 来模拟输入设备。
如果可以使用HTML代替图片,另一种可能是使用a2h来制作HTML内容。
答案2
textimg 工具会很棒,但是它无法正确处理某些字符。希望我能弄清楚,因为这将是最简单的选择。
FWIW这是我想出的解决方案:tmux + python + imagemagick
通过 ssh 在树莓派上启动 tmux,运行bpytop
我想要“截图”的命令。
tmux new -dstelemetry 'bpytop'
然后使用以下命令捕获此 tmux 窗口的 ansi 输出:
tmux capture-pane -e -J -p -t telemetry > bpytop.ansi
然后将 ansi 文件转换为 svg这个Python工具
cat bpytop.ansi | ansitoimg --wide bpytop.svg
然后将 svg 转换为图像(稍微裁剪以删除空白)
convert bpytop.svg -crop 976x582+9+43 bpytop.jpg