コンソールプログラムでJPEG画像/画像ストリームをキャプチャしますか?

コンソールプログラムでJPEG画像/画像ストリームをキャプチャしますか?

私はヘッドレスRaspberry Piを実行しており、コンソール/ターミナル出力を単一のjpegまたはビデオストリームに変換したいと思います。

例:pbytop数秒ごとに出力をキャプチャし、mjpegを使用して(またはh264ストリームとしてffmpeg経由で)ウェブサイトにストリーミングします。

私はjpeg /ビデオキャプチャ部分に閉じ込められ、そのメディアをパイからウェブサイトにストリーミングしています。

私が得た最も近いものは次のとおりです。

  • SSH経由でパイで接続
  • スタートtmux
  • pbytoptmux内で起動
  • 2番目の仮想端末でpiとしてssh
  • 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でraw pbytopを実行し、そこから画像をキャプチャします。

xvfbと対話する必要がある場合は、xneeまたはxdotoolを使用して入力デバイスをシミュレートする必要があります。

画像の代わりにHTMLを使用できる場合は、a2hを使用してHTMLコンテンツを作成することも別の可能性です。

答え2

textimgツールは素晴らしいでしょう。しかし、一部の文字を正しく処理できません。。これが最も簡単なオプションになりますので、理解できることを願っています。

FWIW これが私が思いついた解決策です。tmux + python + imagemagick

SSHを介してRaspberry Piで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を示すスクリーンショット

ここに画像の説明を入力してください。

関連情報