
【小ネタ】Kinesis Video Streamsへ送信する動画にclockoverlayで時間を挿入する
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
CX事業本部の平内(SIN)です。
Kinesis Video Streamsで動画を送信する場合、時刻の情報を併せて残したい場面があるかも知れません。 今回は、clockoverlayエレメントを使用して、そのようなニーズに答える要領を確認してみました。
2 環境
確認に使用した環境は、Model 4B と Logicool HD Pro Webcam C920です。

OSは、昨年9月の最新版(Raspbian GNU/Linux 10 (buster) 2019-09-26-raspbian-buster-full.img です。
$ cat /proc/cpuinfo | grep Revision Revision : c03112 $ lsb_release -a No LSB modules are available. Distributor ID: Raspbian Description: Raspbian GNU/Linux 10 (buster) Release: 10 Codename: buster $ uname -a Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
3 clockoverlay
clockoverlayは、GStreamerのエレメントであり、パラメータで指定した形式で時刻を動画に埋め込む事ができます。
下記は、clockoverlayのドキュメンの抜粋ですが、殆ど全ての形式の入力及び出力が可能であることが分かります。従って、H.264でエンコードする前の段階であれば、気楽に挿入しても問題なさそうです。
https://gstreamer.freedesktop.org/documentation/pango/clockoverlay.html?gi-language=c
4 とりあえず表示
下記のように、omxh264encでエンコードする前に、clockoverlayを入れてみました。
$ gst-launch-1.0 -v v4l2src ! videoconvert ! video/x-raw,width=640,height=480,framerate=30/1 ! clockoverlay font-desc="Sans bold 60px" ! omxh264enc periodicty-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name=testStream
送信されている動画を確認している様子です。

作業は、環境変数で認証情報とリージョンを設定した状態で行っています。
export AWS_DEFAULT_REGION=ap-northeast-1 export AWS_ACCESS_KEY_ID=xxxxxxxxxxxxxx export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxxxx
また、デバイスはdevice=/dev/video0(v4l2srcでのデフォルト)で認識されてます。
5 パラメータ
clockoverlayで利用可能なパラメータは、gst-inspect-1.0で確認できます。
$ gst-inspect-1.0 clockoverlay
(略)
Element Properties:
(略)
  text                : Text to be display.
                        flags: readable, writable, controllable
                        String. Default: ""
(略)
  halignment          : Horizontal alignment of the text
                        flags: readable, writable
                        Enum "GstBaseTextOverlayHAlign" Default: 0, "left"
                           (0): left             - left
                           (1): center           - center
                           (2): right            - right
                           (4): Absolute position clamped to canvas - position
                           (5): Absolute position - absolute
  valignment          : Vertical alignment of the text
                        flags: readable, writable
                        Enum "GstBaseTextOverlayVAlign" Default: 2, "top"
                           (0): baseline         - baseline
                           (1): bottom           - bottom
                           (2): top              - top
                           (3): Absolute position clamped to canvas - position
                           (4): center           - center
                           (5): Absolute position - absolute
以下に、主なものをまとめてみました。
| パラメータ | 機能 | 
|---|---|
| text | 指定したテキストを表示 | 
| shaded-background | テキスト領域の下に背景をシェーディングを入れるかどうか | 
| shading-value | シェーディング値 1-255 Default:80 | 
| halignment | テキストの水平方向の配置 left,center,right,Absolute position | 
| valignment | テキストの垂直方向の配置 baseline,bottom,top,center,Absolute position | 
| xpad | 水平方向のパディング | 
| ypad | 垂直方向のパディング | 
| deltax | X位置のシフト(ピクセル単位) | 
| deltax | Y位置のシフト(ピクセル単位) | 
| xpos | 水平位置 | 
| ypos | 垂直位置 | 
| wrap-mode | ラップのモード none,word,char,wordchar | 
| font-desc | フォント指定 | 
| silent | テキスト表示の有無 | 
| line-alignment | テキスト行の配置 left,center,right | 
| auto-resize | フォントサイズの自動調整 | 
| scale-mode | ビデオのスケーリングで歪みが生じないようにするためのモード設定 | 
| color | 色指定 | 
| text-x | テキストのX位置 | 
| text-y | テキストのY位置 | 
| text-width | テキストの幅 | 
| text-height | テキストの高さ | 
| time-format | 時間表示形式 "%H:%M:%S" | 
6 最後に
非常に簡単に利用可能です。場面によっては便利に使えるかも知れません。






