秋葉原ロボット部で開発している LEDパネルキット AKBONE2022 は、らびやん さんの協力により LovyanGFX で動くようになっています。
今回は、高速で使いやすい LovyanGFX の特性を活かして動画再生にチャレンジ!
128x64 のLEDパネルで動画再生 #AVTOKYO で頒布したAKBONE2022 + LovyanGFX ( 開発版 ) pic.twitter.com/tdf1qIgGF0
— nanbuwks (@nanbuwks) December 14, 2022
環境
- AKBONE2022 基本キット
- AKBONE2022 ブースターキット
- 母艦 Ubuntu 22.04 LTS Ja
母艦は動画ファイルの変換に使います。ですが ffmpeg を使うことができれば Windows や Mac でも同様に使えるはずです。
ブースターキットのうち、今回の実験ではSDカードソケットだけを使用します。なので基本キットにSDのカードソケットだけを付け足すのでも構いません。
LEDパネルは 64x32, 128x64 どちらでも対応できますが、やはり解像度が高い方が見栄えがいいです。
元動画
WikiMedia から、File:Hubblecast 27.webm を使用しました。
https://commons.wikimedia.org/wiki/File:Hubblecast_27.webm
元動画は length 6 min 44 s, 1,920 × 1,080 pixels です。
WikiMedia では、各解像度にトランスコードされたファイルが用意されています。
今回使用しようとしている LEDパネルは 64x32 または 128 x 64 ドットなので、サイズが合いませんが最も解像度の低い Hubblecast_27.webm.160p.webm をダウンロードします。
動画を調査
$ ffmpeg -i Hubblecast_27.webm.160p.webm
.
.
.
libpostproc 55. 9.100 / 55. 9.100
Input #0, matroska,webm, from 'Hubblecast_27.webm.160p.webm':
Metadata:
encoder : Lavf57.56.101
Duration: 00:06:44.05, start: 0.000000, bitrate: 221 kb/s
Stream #0:0(eng): Video: vp8, yuv420p(progressive), 284x160, SAR 1:1 DAR 71:40, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Stream #0:1(eng): Audio: vorbis, 48000 Hz, stereo, fltp (default)
At least one output file must be specified
とすると、 284x160 であることがわかります。
これを 64x32 ないし 128x64 に変換します。
動画を変換
$ ffmpeg -i Hubblecast_27.webm.160p.webm -vf "crop=256:128:14:16,scale=w=64:h=32" -c:v rawvideo -pix_fmt rgb565be 64x32.rgb
$ ffmpeg -i Hubblecast_27.webm.160p.webm -vf "crop=256:128:14:16,scale=w=128:h=64" -c:v rawvideo -pix_fmt rgb565be 128x64.rgb
上の処理は、一旦256x128にトリミングして、更に縦横 1/4 ないし 1/2 に縮小しています。
フォーマットはRGB565be です。
また、今回は使用しませんが 256x128 や 384x192 の映像も以下のようにすると作ることができます。
$ ffmpeg -i Hubblecast_27.webm.160p.webm -vf "crop=256:128:14:16" -c:v rawvideo -pix_fmt rgb565be 256x128.rgb
384x192 の映像は 240p のソースから作成します。
$ ffmpeg -i Hubblecast_27.webm.240p.webm
.
.
.
Input #0, matroska,webm, from 'Hubblecast_27.webm.240p.webm':
Metadata:
encoder : Lavf57.56.101
Duration: 00:06:44.05, start: 0.000000, bitrate: 302 kb/s
Stream #0:0(eng): Video: vp8, yuv420p(progressive), 426x240, SAR 427:426 DAR 427:240, 25 fps, 25 tbr, 1k tbn, 1k tbc (default)
Stream #0:1(eng): Audio: vorbis, 48000 Hz, stereo, fltp (default)
At least one output file must be specified
426x240ドットということがわかりましたのでそこから384x192分を切り出します。
$ ffmpeg -i Hubblecast_27.webm.240p.webm -vf "crop=384:192:21:24" -c:v rawvideo -pix_fmt rgb565be 384x192.rgb
64x32.rgb ないし 128x64.rgb を sd カードに保存します。
スケッチ
こちらを使います。
動画再生
写真では色が褪せてますが実物はかなりきれいです!
これだけできたら音も出したくなりますね! これから思案します。
注意点
LEDパネルはかなり電力を使用するので、ESP32 に供給している電源ケーブルだけだと不足気味です。
LEDパネルは輝度を低めにして使うほうが安定します。
補助電源コードなども併用してください。