定期的に動画作成
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書式チェックして検証できるサイトを見つけた。
素敵ね。
参考
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