
マイコンボードで動画をなめらかに再生できるのか――。DSN IndustriesのDerdaca氏がESP32-S3を使った音声同期付きビデオプレーヤーを製作し、ソースコードをGitHubで公開した。
ESP32-S3はデュアルコアの高性能マイコンだが、MP4のようなフォーマットをリアルタイムでデコードする処理能力はない。そこで採用したのがMJPEG(Motion JPEG)形式だ。動画をフレーム単位のJPEG画像として保存し、1枚ずつデコードして表示する。付属のPythonスクリプトに動画ファイルを入力フォルダーに置いて実行すると、フォーマット変換と横幅320ピクセルへのリサイズを自動で処理する。ffmpegの知識がなくても素材を準備できる仕組みだ。変換後のファイルをFAT32フォーマットのmicroSDカードにコピーすれば準備は完了する。
ハードウェアはESP32-S3開発ボード(16MBフラッシュ/8MB PSRAM推奨)、240×280ピクセルのST7789 TFTディスプレイ、MAX98357A I2Sアンプと3Wスピーカー、microSDカードリーダー、3つのタクトスイッチで構成する。メニュー画面で上下ボタンからファイルを選び、再生ボタンを押すと動画が始まる。再生中にもう一度ボタンを押すとメニューに戻る。音量はコード内のゲイン設定(0~21)で調整でき、Derdaca氏は20を推奨している。
映像と音声の同期はESP32-S3のデュアルコアを活用して確保した。一方のコアでSDカードからのデータ読み込みとJPEGDECライブラリによるデコードを処理し、もう一方のコアでI2S経由の音声出力を並行して走らせる。開発環境はArduino IDEで、表示にはTFT_eSPIライブラリを使う。ディスプレイのピン設定はTFT_eSPIのUser_Setup.hを自分の配線に合わせて編集する必要がある。ソースコード、配線図、変換スクリプトはGPL-3.0ライセンスでGitHubに公開されている。

