【小ネタ】Kinesis Video Streamsへ送信する動画にclockoverlayで時間を挿入する

2020.02.22

この記事は公開されてから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 最後に

非常に簡単に利用可能です。場面によっては便利に使えるかも知れません。