Raspberry Pi Zero WHで作った定点カメラを改良したい③定期的に動画作成

定期的に動画作成

ffmpegを使って動画を作成する。なぜffmpegかというとそれしか知らないからだ。

ffmpegをインストール

$ sudo apt-get install ffmpeg

する。とりあえずこの前やったやり方でできるか確認。

$ ffmpeg -start_number 0000 -r 30 -i %5d.jpg -r 30 -an -vcodec libx264 -pix_fmt yuv420p video.mp4

できた…、完。ちがくて。豆苗食べちゃったので何も映ってないけど左上の日付がちゃんとなっとるので良い。で、ラズパイ上でエンコードしてみたはいいものの、fpsが0.6だった。期待してたんと違う…。何枚ぐらいだったか忘れたけど450枚ぐらいだったかな?で、30分ぐらいかかって動画ができた。さすがにちょっと遅いなぁと調べてみると、今やったのはソフトウェアエンコードで、ラズパイにはカメラのストリーミングとかする用の、ハードウェアが搭載されてるらしい。で、それを使ってエンコードする速くなるみたい。といってもZeroだし、普通のラズパイよりは遅いだろうなぁと思いつつ、やってみることにする。

ffmpegのアンインストール

$ sudo apt-get remove ffmpeg x264 libav-tools libvpx-dev libx264-dev

これしか見つかんなかったので、これでアンインストール。大丈夫かな。わからん。

ffmpegをハードウェアエンコードができるようにインストール

ソースからラズパイ上でビルドし、それをインストールするということみたい。流れはほぼ

https://www.kaoriya.net/blog/2017/10/07/

こちらの通りにやった。一点$ sudo apt build-dep ffmpegで詰まったので、その際にはこちら

https://qiita.com/tetsu_koba/items/904b03e908b040ed447d

を参考にした。ビルド中エラーっぽいのが色々出たけど気にしない♪~(´ε` )

エンコードしてみる

-vcodec h264_omxというオプションが肝ということなので、とりあえずこれだけ変えてエンコードしてみる。

$ ffmpeg -start_number 0000 -r 30 -i %5d.jpg -r 30 -an -vcodec h264_omx -pix_fmt yuv420p video.mp4

こう。で、エンターをッターン!と押すと…

frame= 1081 fps=6.7 q=-0.0 Lsize= 1072kB time=00:00:36.00 bitrate= 244.0kbits/s speed=0.224x

おおっ速い。6fpsだから10倍ぐらい速くなった。動画は…

画質悪っ。なんかビットレートが抑えられてる。同じソースでlibx264を使ってPCでエンコードすると、総ビットレートは3889kbpsだったので、ラズパイのオプションに-b:v 3889kと追加してみる。

$ ffmpeg -start_number 0000 -r 30 -i %5d.jpg -r 30 -an -vcodec h264_omx -b:v 3889k -pix_fmt yuv420p video.mp4

あれ、エンコ時間長くなって結局遅くなるんじゃね…?と恐る恐るやってみると…

frame= 1081 fps=6.7 q=-0.0 Lsize=   17086kB time=00:00:36.00 bitrate=3888.0kbits/s speed=0.223x

お、大丈夫そう。速さ大して変わってない。

いい感じでわ!?カメラ動いちゃったり、夜に何故か青い影が写ったりは別として、よさげです。ただビットレートの調整毎回はできんので、そこがめんどくさい。まぁ3800kぐらいにしとけばいいのかな。あとはこれを定期的に動かせばいいんだ。

シェルスクリプトを書く

さっきのコマンドを自動的にやってくれるような感じにすればいいんだなーということで、シェルスクリプトを書けばいいみたい。書いたこと無いけど。とりあえずnas内にenc.shというファイルを作りつつ

#!/bin/sh

today=$(date "+%Y%m%d")
path="/home/pi/nas/vid/"
filename="${path}video${today}.mp4"

ffmpeg -start_number 0000 -r 30 -i /home/pi/nas/pic/%5d.jpg -r 30 -an -vcodec h264_omx -b:v 3800k -pix_fmt yuv420p "${filename}"

こんな感じで書いてみた。まぁ日付をファイル名に使って、今ある写真を全部エンコするだけ。でvidフォルダに保存。正直これで書き方合ってるのかどうか分かってないんだけど、動きはするのでいい感じ。実行するには実行権限を付けてあげないといけないとのことなので

$ sudo chmod 777 ./enc.sh

777で合ってるかはアレです。付け過ぎな気もする。

3 18 * * * /home/pi/nas/enc.sh

そんでcronに追記。帰宅後に当日分をチェックしたいのと、撮影と被るのがどうだろーと思ったので、毎日18:03に設定した。そういえばcron書式チェックして検証できるサイトを見つけた。

https://crontab.guru/

素敵ね。

参考

http://kurumatorajirou.blogspot.com/2012/10/ubuntu-ffmpeg.html

https://www.kaoriya.net/blog/2017/10/07/

https://qiita.com/tetsu_koba/items/904b03e908b040ed447d

https://signal-flag-z.blogspot.com/2016/09/rapberry-pi-3-h264omxffmpeg.html

https://qiita.com/zayarwinttun/items/0dae4cb66d8f4bd2a337#%E5%9F%BA%E6%9C%AC%E8%A8%AD%E5%AE%9A

https://qiita.com/mochizukikotaro/items/f3a78d631595f9744a75

http://motw.mods.jp/shellscript/tutorial.html

https://www.mtioutput.com/entry/2018/02/15/151849

カテゴリー: できた タグ: , , , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です