AWS Elemental MediaConvertの入力リミックス制御機能を使ってみた！

こんにちは、streampackのfadoです。気づいたら2019年もいよいよ終わりを迎えますね。本日は仕事納め、今年最後の出勤と共に、2019年の最後の記事となります！是非ご参考になればと思います！

#背景
最近、AWS Elemental MediaConvert(以下 MediaConvert)を用いて動画変換の作業が増えていて、未だに使いこなせていない機能がたくさんある中、**入力リミックス制御 (チャネルマッピング)** という機能を初めて使ったので理解の範囲内で記事にしたいと思います。もし、ここは違うぞ！などがあれば優しい日本語でご指摘頂けますと幸いです。

#用語
MediaConvertではChannelを**チャンネル**ではなく、**チャネル**と記載していますので本記事ではチャネルで統一します。

###チャネル
音声情報である「波形」のことです。
###トラック
チャネルが入っているものと言います。チャンネルが１つしか入っていないトラックは**モノラルトラック**、２つ入っているトラックなら**ステレオトラック**と呼びます。
###チャネルマッピング
特定のデータだけ選んで出力し、それを別のトラックやチャネルに割り当てる作業です


#チャネルマッピングのユースケース
- オーディオトラック内のチャネル順を変更する
- 複数のチャネルのオーディオを1つのチャネルにまとめる
- オーディオチャネルの音量レベルを調整する

といったチャネルレベルでの制御ができます。

今回は`複数のチャネルのオーディオを1つのチャネルにまとめる`についてですが、1つ（Mono）ではなく、2つのチャネル(Stereo)で試してみたいと思います。

#目的
Input Audioを1トラックの5.1chからStereoに変換します。
![5point1_stereo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/139d4550-12fb-f470-e119-380bb61d8ed5.png)
出典元：https://trac.ffmpeg.org/wiki/AudioChannelManipulation#a5.1stereo

上記のようにInputのFront Left(FL),Behind Left(BL),Front Center(FC)をOutputのFLチャネルに、
FrontRight(FR),Behind Right(BR),Front Center(FC)をOutputのFRチャネルにマッピングします。
＊ Low Frequency Effect(LFEは除外します）

#Input用動画ファイル 
サンプル動画ファイル：sintel-1024-surround.mp4　(1トラック 6channels (5.1ch))
( https://durian.blender.org/download/ )


`mediainfo`コマンドでAudioの部分のみ抜擢。

```
Audio
ID                                       : 2
Format                                   : AAC LC
Format/Info                              : Advanced Audio Codec Low Complexity
Codec ID                                 : mp4a-40-2
Duration                                 : 14 min 48 s
Bit rate mode                            : Variable
Bit rate                                 : 441 kb/s
Channel(s)                               : 6 channels
Channel layout                           : C L R Ls Rs LFE
Sampling rate                            : 48.0 kHz
Frame rate                               : 46.875 FPS (1024 SPF)
Compression mode                         : Lossy
Stream size                              : 46.7 MiB (38%)
Language                                 : English
Encoded date                             : UTC 1970-01-01 00:00:00
Tagged date                              : UTC 1970-01-01 00:00:00
```

```
$ mediainfo --version
MediaInfo Command line,
MediaInfoLib - v19.09
```

`ffprobe` コマンドで5.1chであることを確認できます。 `48000 Hz,`の次に`5.1`が書いてあるところですね。

```
$ ffprobe -version |head -n 1
ffprobe version 4.1.3 Copyright (c) 2007-2019 the FFmpeg developers


$ ffprobe sintel-1024-surround.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sintel-1024-surround.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01T00:00:00.000000Z
    title           : Sintel
    encoder         : Lavf52.78.5
    copyright       : (c) copyright Blender Foundation | durian.blender.org
    description     : Sintel open movie project
  Duration: 00:14:48.06, start: 0.000000, bitrate: 1164 kb/s
    Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1024x436 [SAR 1:1 DAR 256:109], 718 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 440 kb/s (default)
    Metadata:
      creation_time   : 1970-01-01T00:00:00.000000Z
      handler_name    : SoundHandler
```

#手順
###MediaConvertでの設定
MediaConvertのAWSコンソール画面から[ジョブ]または[ジョブテンプレート]からアクセスできます。今回は[ジョブ]から設定を見ていきましょう。

[MediaConvert] -> [ジョブ] -> [ジョブの作成] -> [入力] -> [オーディオセレクター]

![スクリーンショット 2019-12-26 17.00.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/a51372ef-d0e7-9a8f-4cd2-3f3586cf6b23.png)


セレクタタイプ
-> Track

トラック
-> 1

[入力ミックス制御]をオンにします

入力チャネル
-> 6
出力チャネル
-> 2
チャンネルマッピング
->　上記画像のように設定します
* 単位は**dB** 
* 許容値は、**-60**(ミュート)から**6**の範囲で**0**は入力チャネルを変更せずにOutputチャネルに渡します
* 未記入の場合、**-60**(ミュート)扱いになります

今回はInputのAudioの検証なのでOutputでの細かい設定はせずに動画のビットレートのみ設定し、そのほかの値はデフォルト値にしました。

#結果
変換をかけたあとのOutput動画ファイルの内容を見てみましょう。Stream #0:1のところでstereoになっていることが確認できました。動画再生も視聴も問題ありませんでした。

```
$ ffprobe sintel-1024-surround-Stereo.mp4 -hide_banner
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'sintel-1024-surround-Stereo.mp4':
  Metadata:
    major_brand     : M4V
    minor_version   : 1
    compatible_brands: isomavc1mp42
    creation_time   : 2019-12-26T03:03:49.000000Z
  Duration: 00:14:48.00, start: 0.000000, bitrate: 2101 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1024x436 [SAR 1:1 DAR 256:109], 1999 kb/s, 24 fps, 24 tbr, 24k tbn, 48 tbc (default)
    Metadata:
      creation_time   : 2019-12-26T03:03:49.000000Z
      handler_name    : ETI ISO Video Media Handler
      encoder         : Elemental H.264
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 96 kb/s (default)
    Metadata:
      creation_time   : 2019-12-26T03:03:49.000000Z
      handler_name    : ETI ISO Audio Media Handler
```

#結論
オーディオトラック内の特定のチャネルのみを抽出し、Outputに出力させたり、チャネルの順番を変更したりする場合にチャネルマッピングが便利です。チャネルの音量を調整することも可能なので用途に合わせてぜひ試してみて下さい。今回はMediaConvertでの設定となりますが`ffmpeg`コマンドでもチャネルマッピングができます（今度試してみようかなと）

上記の検証に加えまして、例えばスポーツの動画等でオーディオの１トラックに4ch(1chと2chは実況あり、3chと４chは実況なし）が含まれるとします。実況なしのStereoトラックに変換したい場合は下記の設定で実現できます。

![スクリーンショット 2019-12-26 17.46.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429912/9097a636-1bdb-28e4-260d-0a30ad93b001.png)

VideoやAudioを操作する機能はまだまだたくさんあります。これから少しずつ他の機能の使い方を理解し、動画配信の知識を深めていきたいと思います！

#補足
チャネルレイアウトについて`ffmpeg`コマンドで確認することができます。

```
$ ffmpeg -version |head -n 1
ffmpeg version 4.1.3 Copyright (c) 2000-2019 the FFmpeg developers

$ ffmpeg -layouts -hide_banner
Individual channels:
NAME           DESCRIPTION
FL             front left
FR             front right
FC             front center
LFE            low frequency
BL             back left
BR             back right
FLC            front left-of-center
FRC            front right-of-center
BC             back center
SL             side left
SR             side right
TC             top center
TFL            top front left
TFC            top front center
TFR            top front right
TBL            top back left
TBC            top back center
TBR            top back right
DL             downmix left
DR             downmix right
WL             wide left
WR             wide right
SDL            surround direct left
SDR            surround direct right
LFE2           low frequency 2

Standard channel layouts:
NAME           DECOMPOSITION
mono           FC
stereo         FL+FR
2.1            FL+FR+LFE
3.0            FL+FR+FC
3.0(back)      FL+FR+BC
4.0            FL+FR+FC+BC
quad           FL+FR+BL+BR
quad(side)     FL+FR+SL+SR
3.1            FL+FR+FC+LFE
5.0            FL+FR+FC+BL+BR
5.0(side)      FL+FR+FC+SL+SR
4.1            FL+FR+FC+LFE+BC
5.1            FL+FR+FC+LFE+BL+BR
5.1(side)      FL+FR+FC+LFE+SL+SR
6.0            FL+FR+FC+BC+SL+SR
6.0(front)     FL+FR+FLC+FRC+SL+SR
hexagonal      FL+FR+FC+BL+BR+BC
6.1            FL+FR+FC+LFE+BC+SL+SR
6.1(back)      FL+FR+FC+LFE+BL+BR+BC
6.1(front)     FL+FR+LFE+FLC+FRC+SL+SR
7.0            FL+FR+FC+BL+BR+SL+SR
7.0(front)     FL+FR+FC+FLC+FRC+SL+SR
7.1            FL+FR+FC+LFE+BL+BR+SL+SR
7.1(wide)      FL+FR+FC+LFE+BL+BR+FLC+FRC
7.1(wide-side) FL+FR+FC+LFE+FLC+FRC+SL+SR
octagonal      FL+FR+FC+BL+BR+BC+SL+SR
hexadecagonal  FL+FR+FC+BL+BR+BC+SL+SR+TFL+TFC+TFR+TBL+TBC+TBR+WL+WR
downmix        DL+DR
```

#参考文献
https://docs.aws.amazon.com/ja_jp/mediaconvert/latest/ug/more-about-audio-tracks-selectors.html
https://trac.ffmpeg.org/wiki/AudioChannelManipulation
http://audacity-mp3.xyz/monoraru-sutereo/
https://nico-lab.net/about-ffmpeg/