ffmpegを使用して5.1をステレオに適切にダウンミックスします


27

左前と右前に音楽があり、中央に台詞がある映画の5.1オーディオトラックがあります。VLCで5.1トラックを再生すると、すべてがうまくブレンドされます。

を使用して5.1トラックをステレオに変換しようとしていますffmpeg -ac 2が、生成されるステレオミックスの音量は、5.1トラックをネイティブで再生する場合よりもはるかに弱くなります。

追加-af "pan=stereo|c0=FL|c1=FR"すると正しい音量になりますが、中央のチャンネルが含まれていないため、ダイアログは表示されません。

だから、解決策は、おそらく左/中央/右をステレオにミックスし、バックエンドのサブウーファーチャンネルを捨てることでしょうか?(私はここで推測しています...)

質問は次のとおりです。VLCが行うのと同じ方法でffmpegダウンミックス5.1をステレオに変換するにはどうすればよいですか?


VLCは実際に追加のチャンネルを再生していますか?ダウンミキシングにより正規化が行われるため、出力チャネルごとの各入力の合計が過負荷にならないため、クリッピングが防止されます。これにより、音が静かになります。
llogan

基本:私のファイルは5.1です。私のスピーカーはステレオです。VLCの機能はわかりませんが、5.1のソースデータ(強力なボリューム、音楽と対話の両方を含む)からステレオスピーカーに素晴らしい最終結果をもたらします。一方、ffmpegは、を使用すると「低音量」の結果を作成し-ac 2ます。だから、私はffmpegがVLCと同じ良い結果を生成する方法を尋ねています。
フォーリン14

回答:


28

シェーンが提供した答えは、他のチャネルの数が少なすぎ、センターの数が多すぎることを示しています。ヘッドフォンを使用した映画は、すべての対話があり、バックグラウンドミュージック/エフェクトが十分ではないため、バランスが崩れています。

よるATSC規格(セクション7.8、ページ91)、次式が(行列とは対照的に)は、従来のステレオに5.1をダウンミックスするために使用されます。

Lo = 1.0 * L + clev * C + slev * Ls ;
Ro = 1.0 * R + clev * C + slev * Rs ;

前述のドキュメントの表5.9および5.10に従って、センター/サラウンドミックスレベルを0と仮定して、clevおよびslevは.707である必要があります。これらのテーブルには、センターミックスの量を減らす他の値があります。有用。

これを念頭に置いて、次のffmpegオプションは、可聴ダイアログを備えたバランスの良いサウンドを生成します。オーディオチャンネルを指定する必要はありません。

-af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR"

パンフィルターのドキュメントにある小なり記号の使用に関する注意:

チャネル仕様の「=」が「<」に置き換えられる場合、その仕様のゲインは合計が1になるように正規化され、クリッピングノイズが回避されます。


5
ここでリンクしたATSC標準は、トピックに関するFFmpeg wikiからリンクされているため、ここで使用されている式がFFmpegのac -2スイッチで実装されているものと同じであることは当然です。つまり、このフィルターを使用することと実行することの唯一の違いac -2は、より多くの入力です。
ハシム

18

それ以来、この質問に対する答えは少し混乱し、多くの情報が冗長な情報を含んでおり、他の情報は完全に不正確です。この回答は、これらの回答の情報を合理化すると同時に、それらの問題を解決しようとする試みです。

最も重要なことは、グレゴリーの答え、現在この質問に対するトップ投票の答えは、-ac 2スイッチを使用することと変わらないことを心に留めておく価値があります-これについては以下で詳しく説明します。

5.1チャンネルオーディオストリームをステレオにダウンミックスする -ac 2

FFmpegには、5.1トラックをステレオにダウンミックスするための機能が組み込まれています。これは、FFmpegのドキュメントが推奨するソリューションでもあります。

注:ffmpeg -acは、非常に具体的なニーズがない限り、パンフィルターよりも優先される(オプション)必要があるデフォルトのダウンミックス(およびアップミックス)システムを統合します。

この-ac 2スイッチは、ソースの6チャンネルストリームの最初の5チャンネルの割合-Back Left、Back Right、Front Left、Front Right、Front Centerを出力ステレオストリームのFront LeftおよびFront Rightチャンネルにミックスすることで機能します。

ここに画像の説明を入力してください

この場合、このオプションを使用すると、LFEチャンネル(5.1 の.1、サブウーファー用に予約され、ディープな低周波エフェクトに使用)からのオーディオは完全破棄されます。

残念ながら、私のテスト-ac 2では、ソースと最も異なる音楽と対話の両方の全体的なレベルが生じ、テストしたすべての式の中で最悪の出力を与えるダウンミックス式になりましたが、テストして見つけることができます必要に応じて完全に適切なダウンミックスを提供します。その場合、他の式を使用するのはやりすぎです。


トランスコード-ac 2 せずに DTSトラックをダウンミックスするには(つまり、コーデックと拡張子を同じに保ちます):

ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 "stereotrack.dts"

Mephistoの答えで指摘されているように、会話と音楽のバランスが取れていても音量が足りない場合は、音量を上げながらストリームをダウンミックスできます。

ffmpeg -i "sourcetrack.dts" -c:a dca -ac 2 -vol 425 "stereotrack.dts"

ための-volスイッチ、ソース100%の体積は、整数値256に相当し、これは、オーディオストリームの全体の体積を増加させるよりも大きい値を使用して。ただし、過度に大きくすると、特に音量の大きいセクションで歪みやアーチファクトが発生する可能性があることに注意してください。

ステレオにオーディオストリームをダウンミックスするために、そして例えば、AC3コーデックにそれをトランスコード:

ffmpeg -i "sourcetrack.dts" -c:a ac3 -ac 2 "stereotrack.ac3"

カスタムミックスアルゴリズムを使用して5.1チャンネルオーディオストリームをステレオにダウンミックスする

より高品質のダウンミックスが必要な場合、または出力にLFEストリームを絶対に含める必要がある場合は、FFmpegのオーディオフィルタースイッチ(-af)を使用して、カスタムミックス式を使用してオーディオをダウンミックスできます。

ATSCフォーミュラとのダウンミックス(グレゴリーの答え)

この回答を投稿した時点で、この質問に対するトップ投票の回答はGregory'sであり、ATSC仕様(セクション7.8.2、Downmixing to Two Channelsを参照)の式をFFmpegオーディオフィルターに入れました。この仕様自体は、トピックに関するFFmpegのドキュメントによって直接リンクされており、FFmpegが既に-ac 2スイッチに実装しているものと同じ式である可能性が高いことを示しています。これが当てはまる場合、グレゴリーの答えに式全体を入力することは、-ac 2スイッチを使用することと変わらないため、時間の無駄です。

両方-ac 2-afグレゴリーの回答からのフィルターを使用して同じ入力オーディオを再エンコードすることにより、これを確実にテストすることにしました(使用された正確なコマンドはこの回答の脚注で見ることができます)。

次に、結果の出力ファイルのサイズを比較し、バイト単位で同じサイズであることがわかりました。

ここに画像の説明を入力してください

最後に、Audacityで2つの出力ファイルの両方を開き、それらの波形を比較して同一であることを確認しました(クリックして拡大)。

ここに画像の説明を入力してください

したがって、グレゴリーの答えで詳述されているATSC式はFFmpegによって既に実装されているものと同じであり、それを使用しないと何も-ac 2しない場合はそれを使用することは完全に冗長であり、はるかに面倒なコマンドであることがかなり決定的に思えます。

LFEチャンネルを破棄せずにダウンミキシング(Dave_750の答え)

回答に含まれているいくつかの中で、これは完全に破棄するのではなく、LFEチャンネルを出力ステレオにミックスするように見えるダウンミックス公式の唯一のものであり、その結果、ソースからの最小の音を保証するものは失った。

全体の音量レベルは、を行うよりも高くて充実してい-ac 2ますが、下のNightmode Dialogueダウンミックスよりも低くなっています。ただし、音楽レベルはNightmode Dialogueダウンミックスよりもソースにはるかに近く、LFEトラックが含まれているため、このダウンミックス式を使用しながら出力の音量を上げると、他のすべてのソースよりも5.1ソースに忠実な出力ストリームを作成できます私がテストした式。

可能であれば、このダウンミックス式とNightmode Dialogueダウンミックスの両方を使用してオーディオストリームをエンコードし、2つの波形を注意深く比較してどちらが良いかを判断することを強くお勧めします。

この式使用して5.1トラックをステレオにダウンミックスし、ボリュームレベルを425(256は元のソースのボリュームレベルの100%)に増やします。

ffmpeg -i "sourcetrack.dts" -c dca -vol 425 -af "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" "outputstereo.dts"

Robert CollierのNightmode Dialogueとのダウンミックス(Shane Harrelson's answer)

Nightmode対話式で作成されたロバート・コリアーDoom9のフォーラムと彼の答えにシェーン・ハレルソンによって供給、よりはるかに優れたダウンミックスでの結果-ac 2スイッチ-代わりに、過度に静かな対話のは、それが戻ってはるかに近くにあるレベルにそれらをもたらしますソース。

Robert Collierのミックスの説明から:

eac3toを使用して多くのDTSムービートラックを5.1から2.0に変換した後、デフォルトのeac3toチャンネルマッピングが非常に静かなダイアログと過度に大きな音楽とアクションシーンをもたらすことを発見しました。eac3toチャンネルダウンミックス係数には科学的根拠がありますが、対話量が少ないため、実際にはよく聞こえません。このプリセットは、左右のチャンネルの音楽がまだ聞こえているがバックグラウンドでより明瞭なダイアログを探している人向けです。

ご覧のとおり、フロントセンター(ダイアログ)が適切に表示され、元のレベルにとどまりますが、音楽と爆発はバックグラウンドエフェクトのままで、圧倒されません。このプリセットを使用すると、DTS 5.1から2.0に変換された映画を見るときに、ダイアログを聞くために音量ノブを常にいじる必要があるという問題が解決されます。(特に、他の人を起こしたくないが、会話を聞くことができるようにしたい夜に映画を見るために)。

残念ながら、このダウンミックス式の音楽は5.1ソース(「ナイトモード」ミックスを作成するコリアーの意図を考慮して設計された可能性が高い)よりもはるかに低く、LFEトラックが完全に失われるため、全体の出力オーディオは音量を上げたDave_750のフォーミュラ同じか、ソースに近い音。

ただし、何らかの理由でストリーム全体の音量を上げたくない場合は、Nightmode Dialogueが最適なオプションになる可能性があります-ただし、オーディオストリームを両方にエンコードし、2つの波形を注意深く比較することを強くお勧めします。

FFmpegのナイトモードダイアログ式でダウンミックスするには:

ffmpeg -i "sourcetrack.dts" -c dca -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "stereotrack.dts" 

Tarcの答え

この答えは、シェーンハレルソンの答えからNightmode Dialogueダウンミックスの式をMKVコンテナーのオーディオストリームを変換するコマンドに単純に入れます。この回答で指定されたコマンドは、このようなオーディオストリームでは正常に機能しますが、スタンドアロンのオーディオトラックに適応させるとエラーが発生します。

フィルタリングとストリームコピーを一緒に使用することはできません

これは、ダウンミックス時にオーディオコーデックをコピーできないためです-FFmpegが出力ストリームに行う他のすべての変更と同様に、ダウンミックスで、変更を適用するためにトラックを再エンコードする必要があります。

このコマンドには、-ac 2FFmpegが無視する冗長スイッチも含まれていました。


テストコマンド

この回答のために実施したテストの信頼性を実証するために、各ダウンミックス式のテストに使用したすべてのコマンドを以下に示します。

-ac 2オプションに使用されるテストコマンド:

ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -ac 2 "Audio 1 (-ac 2).wav"

グレゴリーの答えに使用されるテストコマンド:

ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL < 1.0*FL + 0.707*FC + 0.707*BL|FR < 1.0*FR + 0.707*FC + 0.707*BR" "Audio 2 (ATSC Algorithm Downmix).wav"

Dave_750の答えに使用されるテストコマンド:

ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -vol 425 -af "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" "Audio 4 (Dave750 Downmix).wav"

シェーンハレルソンの答えに使用されたテストコマンド:

ffmpeg -i "signed16bitPCM.wav" -c pcm_s16le -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" "Audio 3 (Nightmode Dialogue Downmix).wav"

1
印象的な洞察力!これを共有してくれてありがとう。奇妙な-ac 2ことに、最初は劣った結果になり、元の投稿を促されました。もう一度試してみますが、可能であれば、組み込みのダウンミックスで満足のいく結果が得られない5.1の抜粋を共有します。また、トランスコードせずにダウンミックスできることを知ってとても嬉しいです!
フォーリン

@forthrinエンコードとトランスコーディングは異なるものであることに注意してください。トランスコーディングは、あるコーデック/拡張子から別のコーデック/拡張子に変換し、エンコーディングは同じコーデック/拡張子に変換します。トランスコーディングせずに、ダウンミックスして他のFFmpegエフェクトをストリームに適用できますが、エンコードはできません。このac -2オプションにより、すべてのダウンミックス式の結果で最も劣った結果が得られました。これは、ATSC規格の式の単なる失敗だと思います。
ハシム

今これを試しました。動作しているように見えますが、ffmpeg -i 5.1.mp4 -ac 2 2.mp4動作していffplay -i 5.1.mp4 -ac 2ません。
forthrin

9

このダウンミックスを試してください:

-ac 2 -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" 

ロバート・コリアーによって提案 Doom9フォーラムで。


2
これらのオプションはすべてどういう意味ですか?あなたがそれらを説明すると、人々は単にコピー&ペーストする代わりに、あなたの答えを使ってさまざまな問題を解決することができます。
デビッドリチャービー16年

2
@DavidRicherby -ac =オーディオチャンネル(ステレオ用に2)、
af

3
5.1ムービーでこれを試してみましたが、少なくとも出力ステレオは完全にきれいに聞こえました。明確な対話と他に何も欠けているようには見えなかった。VLCの知識を持っている人が、デフォルトの5.1から2.0のダウンミックスで行われていることを正確に共有できれば素晴らしいと思います。
フロントリン

2
@DavidRicherby:オーディオフィルター(-af)内のオプションは次のとおりです。FL= Front-left; BL =後左; FC =フロントセンター; FR =右前; BR =バックライト。フロートは、乗算されたチャネルのボリュームを減少(<1)または増加(> 1)する線形係数です。FL = FC + 0.30 * FL + 0.30 * BLは、フロント左チャネルをフロント中央チャネルに加えて、フロント左の30%とバック左の30%を設定しています。
-kronenpj

1
FWIW:このミックスは、音楽やアンビエントサウンドに比べて、ダイアログの音量が大きすぎると感じています。Tarcの答えで与えられた技術的に正しいミックスは、私にとってはるかに楽しいものです。だから私はあなたがあなたに最適なものを試さなければならないかもしれないと思う、それは状況に依存します。
-jlh

3

したがって、@ Shane Harrelsonの別の質問に対する @Jordan Harrisの回答と組み合わせることにより、レイジーモードをオンにして、ここでinput_51.mkv(5.1)をoutput_stereo.mkv(ステレオ)に変換するために必要なものを以下に示します。

ffmpeg -i input_51.mkv -c:v copy \
    -ac 2 -af "pan=stereo|FL=FC+0.30*FL+0.30*BL|FR=FC+0.30*FR+0.30*BR" \
    output_stereo.mkv

-c:v copyビデオストリームは触れていないことを部分手段(私は推測V IDEO C odec設定がされている警官 IED)。それがなければ、もっと時間がかかります。完全を期すために上記の答えから繰り返すと、-ac 22つのオーディオチャネルを意味し-af、オーディオフィルタを指定します。

コマンドを少し調べたところ、2つのステレオチャンネルの構成方法が設定されていることがわかりました。FL(フロント左チャンネル)原稿から取得されFC(フロントセンター)プラス0.30*FL(正面左から30%)を加えた0.30*BL(バックから30%は左)のように。


これにより、センターチャネルの一貫性と可聴性が維持されますか?
フリード

2

これは今では古い質問ですが、正しい方向を示し、私の結果を共有したいと思いました。

-af "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"

FCとLFEの半分を左右に配置すると、両方のスピーカーからの実効ボリュームが合計1になります。.707 *フロント/バックレフト/ライトを使用すると、これらのチャンネルを適切なレベルに下げ、センターを圧倒しないようにします。


1

-ac 2オプションを使用すると、音楽も音声も他のコンポーネントよりも大きく聞こえないバランスの取れたダウンミックスが得られる場合、音量を上げる必要があります。

-vol 512

この例では512を使用しました。これにより、音が大きくなり、音量が2倍になります。ルールは、256は100%に相当することです

値を大きくしすぎないでください。また、爆発や大きなノイズのある映画の部分の結果を必ず確認してください。大きすぎる値を使用することで、歪みを導入するのは非常に簡単です。


1

-ac 2

ダウンミックスのチャンネルのボリュームは、浮動小数点コーデック-> pcm_f32le、aacで変更されていません

ダウンミックス(LFEなしで5.1から2.0)のボリュームは、整数コーデック-> pcm_s16le、libfdk_aacで1 / 2.5 = -7.96 dB減少します

映画のサウンドは一方向に向けられており、すべてのチャンネルで最大の音圧はありません。したがって、ダウンミックスの量を減らすことは間違っています。レベルの低い圧縮は正しい方法です。それがドルビーの仕事です。


0

このページ全体といくつかの実験を読んだ後、「down_mix」と呼ばれるこのスクリプトを思いつきました。

#!/bin/bash -x

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"
AUDIO_FMT="libopus"
CONTAINER="mkv"

ffmpeg -i "$1" -c:v copy -c:s copy \
    -c:a $AUDIO_FMT \
    -af "pan=stereo|FL=$FL|FR=$FR" \
    "${1%.*}"_dm.$CONTAINER

    # how to test a snippet of movie
    # -ss 41:07.0 -t 4 \

上記の変数を好みに合わせて微調整します。音量が小さいので問題はなかったので、それを省きましたが、簡単に追加できました。


0

ターゲットがpcm_s16leエンコードされている限り、ffmpegフィルター「-ac 2」は正常に機能します。wav形式でpcm_f32leにエンコードすると、音量は9dB以上増加します。したがって、このような場合は「-ac 2」フィルターを使用しないでください。


音量が上がるのはなぜですか?これについてどこで知りましたか?
フォーリン

わからない、なぜ。しかし、私は非常に頻繁にffmpegユーザーです(自分でコンパイルします)。5.1(サイド)ソースを取得し、両方とも「-ac 2」を使用してpcm_s16leおよびpcm_f32le wavファイルに変換します。2つのwavファイルのピークボリュームを比較し、あなたが見る(と聞く)されます:
フランク・マイケル・フィッシャー

これは、たとえばffmpegバージョンN-93636-g6829c3cを使用して発生します
フランクマイケルフィッシャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.