こんにちは、streampackのfadoです。気づいたら2019年もいよいよ終わりを迎えますね。本日は仕事納め、今年最後の出勤と共に、2019年の最後の記事となります!是非ご参考になればと思います!
#背景
最近、AWS Elemental MediaConvert(以下 MediaConvert)を用いて動画変換の作業が増えていて、未だに使いこなせていない機能がたくさんある中、入力リミックス制御 (チャネルマッピング) という機能を初めて使ったので理解の範囲内で記事にしたいと思います。もし、ここは違うぞ!などがあれば優しい日本語でご指摘頂けますと幸いです。
#用語
MediaConvertではChannelをチャンネルではなく、チャネルと記載していますので本記事ではチャネルで統一します。
###チャネル
音声情報である「波形」のことです。
###トラック
チャネルが入っているものと言います。チャンネルが1つしか入っていないトラックはモノラルトラック、2つ入っているトラックならステレオトラックと呼びます。
###チャネルマッピング
特定のデータだけ選んで出力し、それを別のトラックやチャネルに割り当てる作業です
#チャネルマッピングのユースケース
- オーディオトラック内のチャネル順を変更する
- 複数のチャネルのオーディオを1つのチャネルにまとめる
- オーディオチャネルの音量レベルを調整する
といったチャネルレベルでの制御ができます。
今回は複数のチャネルのオーディオを1つのチャネルにまとめる
についてですが、1つ(Mono)ではなく、2つのチャネル(Stereo)で試してみたいと思います。
#目的
Input Audioを1トラックの5.1chからStereoに変換します。
出典元: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] -> [ジョブ] -> [ジョブの作成] -> [入力] -> [オーディオセレクター]
セレクタタイプ
-> 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
コマンドでもチャネルマッピングができます(今度試してみようかなと)
上記の検証に加えまして、例えばスポーツの動画等でオーディオの1トラックに4ch(1chと2chは実況あり、3chと4chは実況なし)が含まれるとします。実況なしのStereoトラックに変換したい場合は下記の設定で実現できます。
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/