SORACOM Users

IoT 体験キット

IoT 体験キット 〜簡易監視カメラ〜をセットアップする

ステップ6: タイムラプス動画を作成する

撮りためた画像を使用して、タイムラプス(低速度撮影)動画を作成してみましょう。

植物の成長や雲の動きなど、ゆっくり変化をするようなものを一定間隔(例えば1分毎)に撮影した画像を使って、仮に1秒間に 30 コマ使用すると1時間が動画では約2秒となるような動画を作成する事が出来ます。こういった映像を「低速度撮影 (タイムラプス) 映像」と呼びます。

パッケージのインストール

動画へのコンバートには、ffmpeg というプログラムを利用しますので、下記のコマンドでパッケージをインストールしてください。既にインストールされている場合は不要です。

実行コマンド
sudo apt install -y ffmpeg

非常に多くのパッケージをダウンロードしますので、少し時間がかかります。3G 接続を切って有線や Wifi 接続でインストールした方がよいかもしれません。3G 接続を切るには USB ドングルを抜きます。再度 USB ドングルを挿せば 3G 接続が有効になります。

スクリプトのダウンロード

スクリプトをダウンロードします。

実行コマンド
sudo wget http://soracom-files.s3.amazonaws.com/time-lapse.sh
sudo chmod +x time-lapse.sh
./time-lapse.sh
実行例
pi@raspberrypi:~ $ sudo wget http://soracom-files.s3.amazonaws.com/time-lapse.sh
--2016-08-02 09:13:16--  http://soracom-files.s3.amazonaws.com/time-lapse.sh
Resolving soracom-files.s3.amazonaws.com (soracom-files.s3.amazonaws.com)... 52.219.16.1
Connecting to soracom-files.s3.amazonaws.com (soracom-files.s3.amazonaws.com)|52.219.16.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1262 (1.2K) [text/plain]
Saving to: ‘time-lapse.sh’

time-lapse.sh                100%[===========================================>]   1.23K  --.-KB/s   in 0s

2016-08-02 09:13:16 (41.6 MB/s) - ‘time-lapse.sh’ saved [1262/1262]

pi@raspberrypi:~ $ sudo chmod +x time-lapse.sh

pi@raspberrypi:~ $ ./time-lapse.sh
Usage: ./time-lapse.sh [options] /full/path/to/output.mp4
Options:
 -d /path/to/images/ (default=/var/www/html/images/)
 -f filter_string (default=no filter)
 -s N (speed, default=30 frames per seconds)

引数なしで実行すると、コマンドの説明が表示されます。

使い方: ./time-lapse.sh [options] /full/path/to/output.mp4 # 出力するMP4ファイルへのフルパス
Options:
 -d /path/to/images/ (default=/var/www/html/images/) # 元となる画像の格納場所
 -f filter_string (default=no filter) # ファイル名のフィルタ
 -s N (speed, default=30 frames per seconds) # スピード、デフォルトでは 30枚/秒、1分に一回撮影したものであれば、30分/秒となる

それでは、実際に画像を動画を変換してみましょう。

オプションを指定しない場合、/var/www/html/images 以下の画像ファイルを全て使用して、動画を作成します。 変換が終わった後の動画をすぐにブラウザで見れるように、/var/www/html/ 以下に動画ファイルを出力しておくと便利です。 画像の枚数やラズパイのバージョンによって変換にかかる時間が変わるので、変換が終わるまで気長に待ちましょう。

実行コマンド
./time-lapse.sh /var/www/html/time-lapse.mp4
実行例
pi@raspberrypi:~ $ ./time-lapse.sh /var/www/html/time-lapse.mp4
-- 1. mkdir /var/tmp/time-lapse-2889 for workspace
-- 2. symlinking images as seqeuntial filename (it may take a while...)
28 files found.

-- 3. converting jpeg files to MPEG-4 video (it may also take a while...)
ffmpeg version 4.1.4-1+rpt1~deb10u1 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 8 (Raspbian 8.3.0-6+rpi1)
  configuration: --prefix=/usr --extra-version='1+rpt1~deb10u1' --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --arch=arm --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-omx-rpi --enable-mmal --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
  libavutil      56. 22.100 / 56. 22.100
  libavcodec     58. 35.100 / 58. 35.100
  libavformat    58. 20.100 / 58. 20.100
  libavdevice    58.  5.100 / 58.  5.100
  libavfilter     7. 40.101 /  7. 40.101
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  3.100 /  5.  3.100
  libswresample   3.  3.100 /  3.  3.100
  libpostproc    55.  3.100 / 55.  3.100
Input #0, image2, from '%08d.jpg':
  Duration: 00:00:00.93, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj444p(pc, bt470bg/unknown/unknown), 640x480 [SAR 96:96 DAR 4:3], 30 fps, 30 tbr, 30 tbn, 30 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg (native) -> h264 (libx264))
Press [q] to stop, [?] for help
[swscaler @ 0x1066bd0] deprecated pixel format used, make sure you did set range correctly
[libx264 @ 0x1035a80] using SAR=1/1
[libx264 @ 0x1035a80] using cpu capabilities: ARMv6 NEON
[libx264 @ 0x1035a80] profile High, level 3.0
[libx264 @ 0x1035a80] 264 - core 155 r2917 0a84d98 - H.264/MPEG-4 AVC codec - Copyleft 2003-2018 - http://www.videolan.org/x264.html - options: cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=6 lookahead_threads=1 sliced_threads=0 nr=0 decimate=1 interlaced=0 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
Output #0, mp4, to '/var/www/html/time-lapse.mp4':
  Metadata:
    encoder         : Lavf58.20.100
    Stream #0:0: Video: h264 (libx264) (avc1 / 0x31637661), yuv420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 30 fps, 15360 tbn, 30 tbc
    Metadata:
      encoder         : Lavc58.35.100 libx264
    Side data:
      cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: -1
frame=   28 fps=6.6 q=-1.0 Lsize=     161kB time=00:00:00.83 bitrate=1581.1kbits/s speed=0.197x
video:160kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.696945%
[libx264 @ 0x1035a80] frame I:2     Avg QP:24.20  size: 13077
[libx264 @ 0x1035a80] frame P:10    Avg QP:26.02  size:  6315
[libx264 @ 0x1035a80] frame B:16    Avg QP:26.26  size:  4599
[libx264 @ 0x1035a80] consecutive B-frames: 17.9%  0.0% 53.6% 28.6%
[libx264 @ 0x1035a80] mb I  I16..4: 15.8% 77.8%  6.4%
[libx264 @ 0x1035a80] mb P  I16..4:  8.3% 22.7%  1.7%  P16..4: 53.3%  7.0%  2.8%  0.0%  0.0%    skip: 4.2%
[libx264 @ 0x1035a80] mb B  I16..4:  1.5%  5.0%  0.5%  B16..8: 43.9%  9.1%  1.2%  direct:15.5%  skip:23.3%  L0:49.3% L1:48.0% BI: 2.7%
[libx264 @ 0x1035a80] 8x8 transform intra:72.5% inter:87.3%
[libx264 @ 0x1035a80] coded y,uvDC,uvAC intra: 52.4% 78.6% 45.6% inter: 29.6% 59.7% 2.1%
[libx264 @ 0x1035a80] i16 v,h,dc,p: 13% 25% 10% 52%
[libx264 @ 0x1035a80] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 15% 16% 31%  7%  7%  7%  5%  7%  6%
[libx264 @ 0x1035a80] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 19% 17%  7%  9% 10%  5%  9%  6%
[libx264 @ 0x1035a80] i8c dc,h,v,p: 63% 19% 16%  3%
[libx264 @ 0x1035a80] Weighted P-Frames: Y:0.0% UV:0.0%
[libx264 @ 0x1035a80] ref P L0: 42.1%  4.6% 26.2% 27.1%
[libx264 @ 0x1035a80] ref B L0: 62.7% 26.0% 11.4%
[libx264 @ 0x1035a80] ref B L1: 93.2%  6.8%
[libx264 @ 0x1035a80] kb/s:1396.13

-- 4. cleanup...

上記の例で出力されたファイルは、 https://[Napter のホスト名]:[ポート番号]/time-lapse.mp4 でアクセスする事が出来ます。USB ドングルを挿しているか今一度確認してください。動画再生には大きな通信量がかかりますので注意してください。

タイムラプス動画サンプル

動画をストリーミングする

パッケージのインストール

動画の撮影・ストリーミングには motion というプログラムを利用しますので、下記のコマンドでパッケージをインストールしてユください。非常に多くのパッケージをダウンロードしますので、少し時間がかかります。3G 接続を切って有線接続でインストールした方がよいかもしれません。3G 接続を切るには USB ドングルを抜きます。再度 USB ドングルを挿せば 3G 接続が有効になります。インストール後は、ストリーミング再生ができるように設定を変更します。

実行コマンド
sudo apt install -y motion
sudo sed -i -e 's/ffmpeg_video_codec mkv/ffmpeg_video_codec mp4/g' /etc/motion/motion.conf
sudo sed -i -e 's/^ffmpeg_output_movies on/ffmpeg_output_movies off/g' /etc/motion/motion.conf
sudo sed -i -e 's/stream_localhost on/stream_localhost off/g' /etc/motion/motion.conf

Apache 設定の追加

ストリーミング動画へアクセスするパスを設定するために Apache に mod_proxy 設定を追加します。以下の例では cat コマンドで追記していますが、vi や nano などのエディタを利用してもよいです。適用するためにサービスを再起動します。

実行コマンド
sudo su -
cat >> /etc/apache2/apache2.conf
# add proxy config for streaming by motion
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
ProxyRequests Off
ProxyPass /stream http://127.0.0.1:8081

(Ctrl+D を 2 回押します)

sudo service apache2 restart

ストリーミングの実行

以下のコマンドでストリーミングを開始します。

実行コマンド
sudo motion

下記の URL アクセスしてストリーミング動画を見ることができます。ストリーミング動画では大きな通信量が発生するのでご注意ください。

https://[Napter のホスト名]:[ポート番号]/stream

ストリーミングを終了するときは Raspberry Pi のウィンドウで Ctrl+C を押してください。

なお、ストリーミング動画では通信速度が必要となります。SIM 管理画面より [詳細] > [速度クラス変更] で通信速度を ‘s1.fast’ にしましょう。 なお 3G 回線のため、SORACOM 側で最高速度に設定しても動画がリアルタイムに再生されないことがあります。リアルタイムな再生が重要であれば以下のサイトより LTE 対応の USB ドングルの購入をご検討ください。 https://soracom.jp/products/

速度クラスの変更 速度クラスの変更ダイアログ

おめでとうございます!皆さんは、IoT 体験キット 〜簡易監視カメラ〜を完了しました。SORACOM を使ったハンズオンを楽しんで頂けましたでしょうか?

さらに SORACOM に興味を持っていただいた方は、以下の Getting Started もご覧ください!

SORACOM Getting Started


Getting Started

SORACOM Air for セルラー

SORACOM Air for LoRaWAN

SORACOM Air for Sigfox

SORACOM Beam

SORACOM Canal/Direct/Door

SORACOM Endorse

SORACOM Funnel

SORACOM Funk

SORACOM Gate

SORACOM Harvest

SORACOM Inventory

SORACOM Junction

SORACOM Krypton

SORACOM Lagoon

SORACOM Mosaic

SORACOM Napter

SORACOM LTE-M Button

GPS マルチユニット SORACOM Edition

IoT 体験キット

Device

サービス機能詳細

Developer Tools

Design Patterns

pagetop