NAS timelapse

NASに動画を残す設定をしておいて、タイムラプスを作成しています。
ATOMCamは簡易防水処理をして屋外に設置して、今のところ順調に撮れているようです。

NASサーバーに置かれたデータをffmpegで1分一コマを取り出し、再度合成して動画化しています。

ご参考に。

「いいね!」 1

少し一般的ではありませんが試してみました。
Linuxマシンに録画データを集めてコマンド(ffmpeg)でタイムラプス化します。
複数のファイルを結合しつつ、フレームを間引いて保存するイメージです。

◆使用した環境
LinuxマシンはRaspberryPi3B+ OS:Raspbian GNU/Linux 10 (buster)を使用
・samba(ファイル共有)を実行。
・動画変換用にffmpegをインストール。
以降、Linuxマシンをラズパイと呼称。

ATOMCam2は「録画モード」を連続録画に、「NASへの録画転送(ベータ)」を有効にして動画ファイルをラズパイに保存。


◆実行した内容

  • ffmpegに読み込ませるファイルのリストを作成
    # ls -1 /home/Video/ATOM_<MACアドレス>/record/20220123/14/* > /home/Video/ATOM_<MACアドレス>/20220123-14_list

  • listの先頭に"file "の文字を挿入
    # sed -i s/^/"file "/g /home/Video/ATOM_<MACアドレス>/20220123-14_list

  • listファイルの中身を確認。こんな感じになってればOK
    # head /home/Video/ATOM_<MACアドレス>/20220123-14_list

file /home/Video/ATOM_<MACアドレス>/record/20220123/14/00.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/01.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/02.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/03.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/04.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/05.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/06.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/07.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/08.mp4
file /home/Video/ATOM_<MACアドレス>/record/20220123/14/09.mp4
  • コマンドの例
    # ffmpeg -f concat -safe 0 -i /home/Video/ATOM_<MACアドレス>/20220123-14_list -vf setpts=PTS/30.0 -af volume=24dB,atempo=30.0 -b:v 2500k -maxrate 15M -c:v h264_omx /home/Video/ATOM_<MACアドレス>/20220123-14.mp4
    ※ ラズパイでは60個のファイル(1時間分)から30倍速の動画(2分)に変換するのに25分ほどかかった。
オプション 備考
-f concat 複数ファイル結合の呪文
-safe 0 リストファイル読み取り時のエラー回避の呪文
-i <リストファイル名> リストファイルを指定
-vf setpts=PTS/30.0 映像30倍速
-af volume=24dB,atempo=30.0 音量調整,音声30倍速
-b:v 2500k ビデオビットレート
-maxrate 15M マックスビットレート ※なくても良い
-c:v h264_omx h264_omxはラズパイのハードウェアエンコーダを利用
libx264でソフトウェアエンコードも可
<出力ファイル名> 出力ファイルのパスとファイル名を指定

ffmpegはオプションの順番が異なると思った結果が得られないことがあるので、そういったときにはオプションの順番などを変えてみましょう。


◆参考にしたページ

似たような感じですが、私はffmpegで1分に一枚ずつjpgファイルにして、
それらを再度mp4にしています
このやり方ですと、ワンライナーは無理ですが、頑張れば2ライナーくらいでできるかも

date=date "+%Y%m%d";
count=1;
for ti in seq -f "%02g" 0 23;
do
for nm in seq -w 0 59;
do
ffmpeg -loglevel error -i /Volumes/capture/record/${date}/$ti/$nm.mp4 -vframes 1 printf "%05g" ${count}.jpg;
count=$((count+1))
done;
done
ffmpeg -i %05d.jpg -vcodec libx264 -pix_fmt yuv420p -r 60 ${date}.mp4

「いいね!」 1

私も連続撮影した映像ファイル群をRaspberryPi3B+でタイムラプス動画化していましたが、スペック上の関係で2.5倍速での読み込みが限界のようなので、今はWindows(Core i3)で変換しています。
Windows(Core i3)でも4倍速くらいの読み込みができていますので60分なら15分ほどで変換できています。

ついでに出力するタイムラプス動画の長さ(秒指定)からフレームの切り出し間隔を計算するようにVBScriptを組みました。
切り出しでjpgファイルを利用されている方もいるようですが、pngファイルにすると画像ファイルの容量はかなり大きくなりますが気持ち劣化を防ぐことができるようです。
ただ元々の映像ファイルの圧縮率が高いので、目に見えるほどの差はありませんが。

私はMac mini corei3 3.6Ghzで変換しており24時間を60秒にするのに大体10分ほどですね。
RaspberryPiは動画再生支援がついてないので、このような動画処理などには不向きかも。
そもそもMacのffmpegもIntelの対応をちゃんとやっているのかなと言う感じもしますけど。

切り出し時にpngにするのは、mp4 → jpg → mp4よりは綺麗だと思いますが、
元々がMP4なのであまり意味がないかもしれません。

このスレは上級者が多いようなので…
某ツールのフォーク版のwebuiで表示されているjpeg画像(cgiで取得できる)はmp4になる前の画像なので画像ソースとしてはそこそこ綺麗だと思います。
フレームレートは低いですが、タイムラプス用としては使えるかも

「いいね!」 1

情報ありがとうございます

このツール?ファームウェア?が良くわからないのでコメントし辛いですが、
ファームが手に入るのであれば、もはやWebで取得しなくても指定秒数でjpg保存すれば良い気もしますね