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をハードウェアエンコードができるようにインストール

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

Raspberry Pi 3 のハードウェアエンコーダーを使う ffmpeg のビルドのしかた — KaoriYa
Raspberry Pi 3 のハードウェアエンコーダーを使える ffmpeg のビルド方法の備忘録です。

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

apt build-dep がエラーになるときの対処方法 - Qiita
新しく立てた仮想マシンなどで apt build-dep を実行すると以下のようなエラーになることがあります。 $ sudo apt build-dep ffmpeg password for koba: Readi...

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

スポンサーリンク

エンコードしてみる

-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書式チェックして検証できるサイトを見つけた。

Crontab.guru - The cron schedule expression editor
An easy to use editor for crontab schedules.

素敵ね。

スポンサーリンク

参考

Ubuntu  ffmpeg のインストール方法
Ubuntu 11.10 または 12.04 に ffmpeg をインストールする方法です。
Raspberry Pi 3 のハードウェアエンコーダーを使う ffmpeg のビルドのしかた — KaoriYa
Raspberry Pi 3 のハードウェアエンコーダーを使える ffmpeg のビルド方法の備忘録です。
apt build-dep がエラーになるときの対処方法 - Qiita
新しく立てた仮想マシンなどで apt build-dep を実行すると以下のようなエラーになることがあります。 $ sudo apt build-dep ffmpeg password for koba: Readi...
Rapberry Pi 3 のハードウエアエンコーダh264_omxが使えるFFmpegをビルドする
WindowsのカスタマイズやRaspberry Piの基本的使い方を紹介やビデオ作成や視聴用ソフトウエアの紹介をしています
初心者向けシェルスクリプトの基本コマンドの紹介 - Qiita
こんにちは、初心者向け基本コマンドを紹介しているシェルスクリプト入門です。 最後で、ファイル名を一発で変える簡単なシェルスクリプトを書いてみましょう。 環境:Mac OSX El Capitan Terminal; bash / sh...
シェルスクリプトで日付と文字列を結合する - Qiita
たとえば、今日が20161031だとして、 article_2016103.txt という文字列をシェルスクリプトで生成する方法です。 today=$(date "+%Y%m%d") echo "article_${today}...
シェルスクリプト入門 書き方のまとめ | Memo on the Web
シェルスクリプトの基本的な文法(if, for, whileなどの制御構文, 引数の扱い, 変数の扱い, 四則演算, 文字列処理(置換, 削除)など)について解説します.
シェルスクリプトに実行権限だけ与えても実行はできない - (O+P)ut
はじめに 結論から言えば、タイトルの通りです。シェルスクリプトに実行権限のみ与えても実行はできないです。こちらの事象について気になって調べた際に、結論になかなか辿り着けなかったので記事にしました。 実行権限の話 前提 まず、Linuxでは 読み取り(r) 書き込み(w) 実行(x) それぞれの権限を chmodコマンド...
スポンサーリンク
できた
スポンサーリンク
スポンサーリンク
スポンサーリンク
dalomo

コメント

タイトルとURLをコピーしました