こんにちは、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