■ 全般
- 設定ファイルは TOML 形式で記述します。
- 設定ファイル内では
#
以降はコメントとして扱われます。
- 設定ファイルは以下の3つのセクションから構成されます。
- ビデオソース定義テーブル
- レイアウト定義テーブル
- 出力定義テーブル
■ version
キー
- 設定ファイルのバージョンを定義します。
- 設定出来る値は
2
のみです。
■ ビデオソース定義テーブル
- ビデオソース定義テーブルは
video_source.name
で宣言します。
name
は各ビデオソースを識別するユニークな名称です。
- ビデオソース定義テーブルでは以下のキーと値を設定します。
キー | 値 | 説明 |
type | 文字列 | ビデオソース種別 |
device | 文字列 | type == "v4l2" の場合のデバイスパス |
pix_fmt | 文字列 | type == "v4l2" の場合のピクセルフォーマット |
width | 整数 | キャプチャ解像度幅 |
heighht | 整数 | キャプチャ解像度高さ |
frame_interval | 有理数サブテーブル | キャプチャ時間間隔 |
■ type
キー
- ビデオソースの種別を指定します。
- 受け入れ可能な文字列は現在 "v4l2" のみです。
■ device
キー
type
キーが "v4l2" の場合、デバイスノードへのパスを指定します。
■ pix_fmt
キー
type
キーが "v4l2" の場合、キャプチャ時のピクセルフォーマットを指定します。
- 対応しているピクセルフォーマットは以下の通りです。
pix_fmt | 説明 |
"I420" | YUV420 Planer |
"NV12" | YUV420 Semi-Planer |
"YUYV" | YUV422 Packed |
"YVYU" | YUV422 Packed |
"UYVY" | YUV422 Packed |
"VYUY" | YUV422 Packed |
■ width
キー
■ height
キー
■ frame_interval
キー
- 有理数サブテーブルである
frame_interval
は以下のキーと値を設定します。
キー | 値の例 | 説明 |
num | 整数 | キャプチャ時間間隔の分子(省略時 1) |
den | 整数 | キャプチャ時間間隔の分母 |
■ ビデオソース定義例
[video_source.name]
type = "v4l2"
device = "/dev/video0"
pix_fmt = "YUYV"
width = 1280
height = 720
frame_interval.num = 1
frame_interval.den = 30
■ レイアウト定義テーブル
- 合成レイアウト定義テーブルは
layout.name
で宣言します。
name
はレイアウトを識別するユニークな名称です。
- レイアウト定義テーブルでは
layout.name.composition
テーブル配列で合成を定義します。
- レイアウト定義テーブルでは
layout.name.overlay
テーブル配列で静止画のアルファ合成を定義することが可能です。 [layout.name]
[[layout.name.composition]]
[[layout.name.overlay]]
■ layout.name.composition
テーブル配列
- 複数の
layout.name.composition
を定義することで複数の映像ソースを用いた映像の合成を定義します。
layout.name.composition
テーブルのキーは以下の通りです。
キー | 値 | 説明 |
source | 文字列 | ビデオソース名 |
crop | 矩形サブテーブル | 切り出し矩形 |
dest | 矩形サブテーブル | 合成先矩形 |
flip | 文字列 | 回転・反転操作 |
filter | 文字列 | 合成時用いるフィルタ処理 |
■ source
キー
video_source
で宣言した名前を指定します。
■ crop
キー (省略可)
- 切り出し矩形を定義するサブテーブルを指定します。
crop
で指定される矩形は source
で指定されたビデオソースの画面範囲内に収まる必要があります。
- 矩形サブテーブルのキーと値は以下の通りです。
キー | 値 | 説明 |
left | 整数 | 矩形左上 X 座標 |
top | 整数 | 矩形左上 Y 座標 |
width | 整数 | 矩形の幅 |
height | 整数 | 矩形の高さ |
■ dest
キー
- 合成先の矩形を定義するサブテーブルを指定します。
dest
で指定する矩形は、後述する output
テーブルの画面範囲内に収まる必要があります。
■ flip
キー (省略可)
- 回転・反転処理を適用します。
- 省略した場合、
"none"
が選択されます。
- 設定可能な値は以下の通りです。
flip | 説明 |
"none" | 設定なし |
"rotate90" | 反時計周りに 90°回転 |
"rotate180" | 180°回転 |
"rotate270 | 反時計周りに 270°回転 |
"horizontal" | 左右反転 |
"vertical" | 上下反転 |
"transpose" | X/Y 軸の入れ替え |
"inv_transpose" | "transpose" + "rotate180" |
■ filter
キー (省略可)
- 合成時に適用されるフィルタを指定します。
- 省略した場合は
"nearest"
が選択されます。
- 設定可能な値は以下の通りです。
filter | 説明 |
"nearest" | Nearest Neighbor |
"bilinear" | Bilinear |
"5tap" | VIC 5 tap interpolation |
"10tap" | VIC 10 tap interpolation |
"smart" | VIC smart interpolation |
"nicest" | VIC nicest interpolation |
■ layout.name.composition
設定例
[[layout.name.composition]]
source = "source_name"
crop.left = 0
crop.top = 0
crop.width = 640
crop.height = 360
dest.left = 0
dest.top = 0
dest.width = 960
dest.height = 540
flip = "horizontal"
filter = "bilinear"
■ layout.name.overlay
テーブル配列
layout.name.overlay
テーブル配列は動画合成後に適用される静止画オーバーレイを定義します。
layout.name.overlay
テーブルを複数定義する事で複数枚の静止画の合成が可能です。
キー | 値 | 説明 |
filename | 文字列 | 画像ファイルへのパス |
alpha | 浮動小数点数 | アルファ値 |
dest | 矩形サブテーブル | 合成先矩形 |
filter | 文字列 | フィルタ種別 |
■ filename
キー
- オーバーレイに用いる画像のファイルパスをフルパスで指定します。
- 対応する画像フォーマットは PNG 形式です。
■ alpha
キー
- アルファ合成を行う場合のアルファ値です。
- 省略した場合は 1.0 として扱われます。
- 値は [0.0, 1.0] の範囲である必要があります。
■ dest
キー
- 合成先の矩形を定義します。
- 形式は先述した矩形サブテーブルと同じ形式です。
- 矩形領域は
output
テーブルの画面範囲内である必要があります。
■ filter
キー
- 合成時に使用するフィルタを指定します。
- 利用できる値は
layout.name.composition
の filter
キーと同一です。
■ 出力定義テーブル
キー | 値 | 説明 |
layout | 文字列 | 合成に使うレイアウト名 |
width | 整数 | 出力解像度の幅 |
height | 整数 | 出力解像度の高さ |
frame_interval | 有理数サブテーブル | 合成処理の実行時間間隔 |
filter | 文字列 | 出力バッファへの転送時のフィルタ |
■ layout
キー
- レイアウト定義テーブルで指定したレイアウトの名前を指定します。
■ width
キー
■ height
キー
■ frame_interval
キー
- 合成処理の実行時間間隔を指定します。
- ビデオソース定義テーブルの
frame_interval
と同様、有理数で指定します。
■ filter
キー
- 合成用のバッファ (RGBAフォーマット) からエンコード用のバッファ (YUV420) に変換する時のフィルタを指定します。
- 設定できる値は
layout.name.composition
の filter
と同様です。
■ 設定ファイルの例
# バージョン 2 設定ファイル
version = 2
# front という名前でビデオソースを定義
# V4L2 デバイス /dev/video0 を "YUYV" フォーマットに設定
[video_source.front]
type = "v4l2"
device = "/dev/video0"
pix_fmt = "YUYV"
width = 1920
height = 1080
frame_interval.den = 30
# left という名前でビデオソースを定義
# V4L2 デバイス /dev/video1 を "YUYV" フォーマットに設定
[video_source.left]
type = "v4l2"
device = "/dev/video1"
pix_fmt = "YUYV"
width = 1920
height = 1080
frame_interval.den = 30
# right という名前でビデオソースを定義
[video_source.right]
type = "v4l2"
device = "/dev/video2"
pix_fmt = "YUYV"
width = 1920
height = 1080
frame_interval.den = 30
# default という名前のレイアウトを定義
[layout.default]
# left をソースとして画像左側 400 ピクセル幅を左右反転して合成
[[layout.default.composition]]
source = "left"
crop.top = 0
crop.left = 0
crop.width = 400
crop.height = 1080
dest.top = 0
dest.left = 0
dest.width = 400
dest.height = 1080
flip = "horizontal"
filter = "bilinear"
# front をソースとして画像中央 1120 ピクセル幅を合成
[[layout.default.composition]]
source = "front"
crop.top = 0
crop.left = 400
crop.width = 1120
crop.height = 1080
dest.top = 0
dest.left = 400
dest.width = 1120
dest.height = 1080
filter = "bilinear"
# right をソースとして画像右側 400 ピクセル幅を左右反転合成
[[layout.default.composition]]
source = "right"
crop.top = 0
crop.left = 1520
crop.width = 400
crop.height = 1080
dest.top = 0
dest.left = 1520
dest.width = 400
dest.height = 1080
flip = "horizontal"
filter = "bilinear"
# 出力設定
[output]
layout = "default" # default レイアウトを使用
width = 1920
height = 1080
frame_interval.den = 30
filter = "bilinear"