从控制台程序捕获 jpeg 图像/图像流?

从控制台程序捕获 jpeg 图像/图像流?

我正在运行无头 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 文件,里面有一堆颜色转义序列,而不是图像。

展示捕获 tmux 到文本的示例

在我走上“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

显示终端输出和最终生成的 jpeg 的屏幕截图

在此输入图像描述

相关内容