参考元: AviLibrary_Arduino
PosixAviLibraryクラスは、JPEGフレームからAVI形式の動画を生成するためのライブラリです。このライブラリは、通常録画とタイムラプス録画の2つのモードをサポートしています。
このモードは、リアルタイムの動画撮影に適しており、フレームの追加時間に基づいてFPS(フレーム/秒)を計算します。
begin()メソッドを呼び出し、ファイル名、幅、高さを指定してAVIファイルを作成・開きます。
#include "PosixAvi.hpp"
PosixAviLibrary avi;
const char* filename = "movie.avi";
uint16_t width = 1280;
uint16_t height = 960;
if (avi.begin(filename, width, height)) {
// 成功
} else {
// エラー処理
}startRecording()を呼び出すことで、AVIヘッダーがファイルに書き込まれ、録画時間計測が開始されます。
if (avi.startRecording()) {
// フレーム追加可能
} else {
// エラー処理
}addFrame()をループ内で繰り返し呼び出し、JPEG画像データとサイズを渡します。これにより、動画にフレームが追加され、FPSやファイルサイズなどの情報が更新されます。
// ループ内で実行
char* imgBuffer = getJpegFrame(); // 独自のJPEG取得関数
uint32_t imgSize = getJpegSize();
if (imgBuffer && imgSize > 0) {
avi.addFrame(imgBuffer, imgSize);
}endRecording()を呼び出して録画を完了させます。これにより、ヘッダー情報が最終的な値に更新されます。
if (avi.endRecording()) {
// 完了
}end()を呼び出してファイルを閉じます。
avi.end();このモードは、特定のFPSで再生される動画を作成するのに適しています。
初期化: 通常録画と同じくbegin()で初期化します。
タイムラプス開始: startTimelapse()を呼び出し、目的のFPSを引数に渡します。
uint8_t targetFps = 10;
if (avi.startTimelapse(targetFps)) {
// タイムラプス録画開始
}フレーム追加: addTimelapseFrame()を呼び出してフレームを追加します。このモードでは、指定したtargetFpsに基づいて動画情報が計算されます。
char* imgBuffer = getJpegFrame();
uint32_t imgSize = getJpegSize();
avi.addTimelapseFrame(imgBuffer, imgSize);終了: endTimelapse()を呼び出して、最終的な情報をヘッダーに書き込みます。
if (avi.endTimelapse()) {
// 完了
}リソース解放: end()を呼び出してファイルを閉じます。
avi.end();