各チャンネルの音声を混ぜたり、入れ替えたり、無音にしたりできるpan
フィルタの使い方。
基本コマンド
ステレオをそのままステレオで出力。
ffmpeg -i stereo -af "pan=stereo|c0=c0|c1=c1" -c:v copy output
ffplay -i stereo -af "pan=stereo|FL=FL|FR=FR"
c1(FR)をそのままにc0(FL)を無音にしたステレオ音声。
ffmpeg -i stereo -af "pan=stereo|c1=c1" -c:v copy output
ffplay -i stereo -af "pan=stereo|c1=FR"
c1(FR)とc0(FL)を逆にしたステレオ音声。
ffmpeg -i stereo -af "pan=stereo|c0=c1|c1=c0" -c:v copy output
ffplay -i stereo -af "pan=stereo|c0=FR|c1=FL"
ステレオ音声をそれぞれ別ファイルで出力。
ffmpeg -i stereo -filter_complex "[0:a]pan=1c|c0=c0[left];[0:a]pan=1c|c0=c1[right]" -map "[left]" left.wav -map "[right]" right.wav
左右のチャンネルを同じだけ合わせたステレオ音声。
ffmpeg -i stereo -af "pan=stereo|c0<1*FR+1*FL|c1<1*FR+1*FL" -c:v copy output
ffplay -i stereo -af "pan=stereo|c0<1*FR+1*FL|c1<1*FR+1*FL"
ステレオを左右ミックスしたモノラルにするにはいくつか方法があり、フィルタを使うならpan
フィルタだけ使うほうが速い。
ffplay -i stereo -af "channelsplit,amix" ffplay -i stereo -af "pan=mono|c0 < c0 + c1" ffmpeg -i input -vn -ac 1 mono.wav
- 複数の音声を混ぜる amix
- 任意の音声チャンネルを出力する channelsplit
- 音声のチャンネルレイアウトを変えるchannelmap
- 音声ストリームのチャンネルレイアウトを指定する amerge
4チャンネルを2つのステレオに分離する。
ffmpeg -i 4channels -filter_complex "pan=stereo|c0=c0|c1=c1[a0];[a:0]pan=stereo|c0=c2|c1=c3[a1]" -map [a0] audio0.wav -map [a1] audio1.wav
5.1チャンネルの音声の音量を変える(FC、LFEを2倍にする)。
ffmpeg -i 6channels -af "pan=5.1|FL=FL|FR=FR|FC=2*FC|LFE=2*LFE|BL=BL|BR=BR" -c:v copy -c:a ac3 output.ts
ffplay -i 6channels -af "pan=5.1|FL=FL|FR=FR|FC=2*FC|LFE=2*LFE|BL=BL|BR=BR"
5.1チャンネルの音声をFLとFRだけのステレオにする。
ffmpeg -i 6channels -af "pan=stereo|FL=FL|FR=FR" output
5.1チャンネルからステレオへのダウンミックス例。
音量順目安。右が大:5 < 4 < 1 < 6 < 2 < 3
- -af "pan=stereo|FL<1.0*FL+0.707*FC+0.707*BL|FR<1.0*FR+0.707*FC+0.707*BR"
- -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR"
- -af "volume=1.66,pan=stereo|FL=.5*FC+.707*FL+.707*BL+.5*LFE|FR=.5*FC+.707*FR+.707*BR+.5*LFE"
- -af "pan=stereo|FL=.3694*FL+.2612*FC+.3694*BL+0.0*LFE|FR=.3694*FR+.2612*FC+.3694*BR+0.0*LFE"
- -af "pan=stereo|FL=.3254*FL+.2301*FC+.2818*BL+.1627*BR|FR=.3254*FR+.2301*FC-.1627*BL-.2818*BR"
- -af "pan=stereo|FL=.374107*FC+.529067*FL+.458186*BL+.264534*BR+.374107*LFE|FR=.374107*FC+.529067*FR+.458186*BR+.264534*BL+.374107*LFE"
- RFC 7845: Ogg Encapsulation for the Opus Audio Codec
- audio - Properly downmix 5.1 to stereo using ffmpeg - Super User
- ffmpeg downmix 7.1 -> 5.1 - Doom9's Forum
LFEの音量を上げる例。
-af "lowpass=c=LFE:f=120,volume=1.6,pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE"
Is this command the standard and the correct way for downmixing 5.1 to stereo ? : ffmpeg
トラック別の音声のチャンネルレイアウトと言語を調べる。
ffprobe -v error -i input -select_streams a -show_entries stream=channel_layout:stream_tags=language -of json > log.json
Audio Channel Layout : mediaarea.net
8チャンネル(FL+FR+FC+LFE+BL+BR+DL+DR)をステレオと5.1に分離する。DLはmediainfoだとLeft Matrix Total、DRはRight Matrix TotalのことでダウンミックスしたLRになる。
ffmpeg -i 8track -filter_complex "amerge=inputs=8,asplit[1],channelmap=map=DL-FL|DR-FR:channel_layout=stereo[stereo];[1]channelmap=channel_layout=5.1[5.1]" -map [stereo] stereo.wav -map [5.1] 5.1.wav
7.1チャンネルから5.1チャンネルへのダウンミックス。
-af "asplit[f][s];[f]pan=3.1|c0=c0|c1=c1|c2=c2|c3=c3[r];[s]pan=stereo|c0=0.5*c4+0.5*c6|c1=0.5*c5+0.5*c7,compand=attacks=0:decays=0:points=-90/-84|-8/-2|-6/-1|-0/-0.1,aformat=channel_layouts=stereo[d];[r][d]amerge"
7.1チャンネルから5.1チャンネルを経由してステレオにダウンミックス。
-af "asplit[f][s];[f]pan=3.1|c0=c0|c1=c1|c2=c2|c3=c3[r];[s]pan=stereo|c0=0.5*c4+0.5*c6|c1=0.5*c5+0.5*c7,compand=attacks=0:decays=0oints=-90/-84|-10/-4|-6/-2|-0/-0.3,aformat=channel_layouts=stereo[d];[r][d]amerge,pan=stereo|FL=.3254FL+.2301FC+.2818BL+.1627BR|FR=.3254FR+.2301FC-.1627BL-.2818BR"
Atmos7.1chから5.1chのac3にエンコードする。音量が下がらないように-drc_scale 0をつける。ffmpeg ac3、eac3は7.1chに対応していない。
ffmpeg -drc_scale 0 -i "Atmos71.eac3" -filter_complex "asplit [f][s]; [f] pan=3.1|c0=c0|c1=c1|c2=c2|c3=c3 [r]; [s] pan=stereo|c0=0.5*c4+0.5*c6|c1=0.5*c5+0.5*c7, compand=attacks=0:decays=0:points=-90/-84|-10/-4|-6/-2|-0/-0.3, aformat=channel_layouts=stereo [d]; [r][d] amerge [a]" -map "[a]" -acodec ac3 -center_mixlev 0.707 -dsurex_mode 2 -ab 640k ac351.ac3
Doom9's Forum - View Single Post - 7.1 downmix function?
Eac3 Atmos To Ac3 - Doom9's Forum
公式ドキュメント:FFmpeg Filters Documentation : pan
公式wiki:AudioChannelManipulation – FFmpeg
オプション
最初の引数で出力チャンネル数を指定し、バーティカルバー|で区切りながら各チャンネルの設定を行う。指定チャンネルの中で設定を行わなければ無音チャンネルになる。c0から順番にチャンネルが割り当てられその順番は チャンネルレイアウトの書式に準ずる。
ffmpeg -layouts 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 SL side left SR side right Standard channel layouts: NAME DECOMPOSITION mono FC stereo FL+FR 3.1 FL+FR+FC+LFE 5.1 FL+FR+FC+LFE+BL+BR 5.1(side) FL+FR+FC+LFE+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
Audio Channel Layout : mediaarea.net
設定の順番は"l|outdef|outdef|..."になる。入力チャンネルを合わせるときに=または<が使え、前者は合計が 1 を超えても超えなくてもそのまま合計する。後者は合計が 1 を超えても超えなくても 1 になるように調整し音量が大きすぎてクリップノイズが発生するのを抑える。
例えば、"pan=stereo|c1=c1"だと stereoは2チャンネル出力でc0(FL)、c1(FR)の設定ができるが、c0は何も書いていないので無音になる。最初のc1が出力するチャンネル、次のc1が入力したチャンネルになり、入力した c1に出力するc1を割り当てている。
複数ファイルを入力したときのcの番号は1入力の音声から0が割り振られ、振り終わったら2入力の音声が引き続き割り振られる。
- l
出力チャンネルレイアウトmono、stereo、5.1などと設定する方法と、出力チャンネル数c0、c1、c2などで設定する方法の2通りがある - outdef
出力チャンネル数を設定したら次のように設定する"out_name=[gain*]in_name[(+-)[gain*]in_name...]"または"out_name<[gain*]in_name[(+-)[gain*]in_name...]" - out_name
出力チャンネル名mono、stereo、5.1などと設定する方法と、出力チャンネル数c0、c1、c2で設定する方法の2通りがある - gain
音量の累乗係数の設定。1 だと入力音量そのまま - in_name
入力チャンネル名の設定。チャンネル番号c0、c1、c2と、チャンネル名で指定できる
参考記事
- GetChannel - Avisynth wiki
- ダウンミックステーブル
- [UPDATED] Audio FAQ - Doom9's Forum
- 7.1ch AAC encoding - VideoHelp Forum
- Multichannel handling · nu774/qaac Wiki
- kAudioChannelLayoutTag_AAC_5_1 | Apple Developer Documentation
- Multiple channel audio data and WAVE files - Windows 10 hardware dev | Microsoft Docs
- Trends in Standardization of Audio Coding Technologies | Broadcast Technology | NHK STRL
- AAC Multichannel Playback Test