web-dev-qa-db-ja.com

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

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

ffmpeg -ac 2を使用して5.1トラックをステレオに変換しようとしていますが、結果のステレオミックスのボリュームは、5.1トラックをネイティブで再生する場合よりもはるかに弱くなっています。

-af "pan=stereo|c0=FL|c1=FR"を追加すると正しい音量が得られますが、センターチャネルが含まれていないため、ダイアログはありません。

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

だから問題は:VLCと同じようにffmpegダウンミックス5.1をステレオにするにはどうすればよいですか?

28
forthrin

シェーンが他のチャンネルを少なすぎてセンターを多すぎると答えた。ヘッドフォン付きの映画は、すべての会話と十分なバックグラウンドミュージック/効果がなく、バランスが取れていませんでした。

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であると仮定して、crevおよび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になるため、クリッピングノイズが回避されます。

29
Gregory

この質問への回答は、それ以降、多くの冗長な情報やその他の完全な不正確さが含まれており、少し混乱しています。この回答は、これらの回答に含まれる情報を合理化し、問題を解決する試みです。

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

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

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

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

-ac 2スイッチは、ソースの6チャネルストリーム(後左、後右、前左、前右、および前中央)の最初の5チャネルの比率を出力の前左および前右チャネルに混合することによって機能します。ステレオストリーム:

enter image description here

そうする場合、LFEチャネルからのオーディオ(5.1では。1、サブウーファー用に予約され、深い低周波効果に使用されます)は 完全に破棄されます このオプションを使用する場合。

残念ながら、私のテストでは-ac 2の結果、音楽と会話の両方のレベルがソースとは最も異なり、テストしたすべての式の中で最悪の出力を提供するダウンミックス式になりました。それはあなたのニーズに完全に適切なダウンミックスを提供することがわかります。その場合、他の式を使用するのはやり過ぎです。


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

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

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

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を参照)2つのチャネルへのダウンミキシング)FFmpegオーディオフィルター。この仕様自体は トピックに関するFFmpegのドキュメントによって に直接リンクしています。これは、FFmpegが-ac 2スイッチ用に既に実装しているものと同じ式である可能性が高いことを示しています。これが当てはまる場合、グレゴリーの答えに数式全体を入力することは、-ac 2スイッチを使用することと同じなので、時間の無駄になります。

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

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

enter image description here

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

enter image description here

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

LFEチャンネルを破棄せずにダウンミックス(Dave_750の回答)

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

全体的な音量レベルは-ac 2を実行するよりも高く、充実していますが、以下のナイトモードダイアログダウンミックスよりもまだ低くなっています。ただし、音楽レベルはナイトモードダイアログダウンミックスよりもソースに非常に近く、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の回答)

Doom9 フォーラムの Robert Collier によって作成され、Shane Harrelsonが回答で提供したNightmode Dialogueの数式は、-ac 2スイッチよりもはるかに優れたダウンミックスをもたらします-過度に静かな対話ではなく、ソースにはるかに近いレベルに戻します。

ロバートコリアのミックスの説明から:

Eac3toを使用して多くのDTS 5.1から2.0までの映画トラックを変換した後、デフォルトのeac3toチャネルマッピングが非常に静かなダイアログと過度に大きな音楽とアクションシーンをもたらすことがわかりました。eac3toチャネルのダウンミックス係数がこのプリセットは、左と右のチャンネルの音楽がまだ聞こえているが、バックグラウンドで聞こえる明瞭な会話を探している人向けです。

ご覧のとおり、音楽と爆発はバックグラウンドエフェクトのままであり、あなたを圧倒することはありませんが、フロントセンター(ダイアログ)は適切に挿入され、元のレベルに留まっています。このプリセットは、対話を聞くために、DTS 5.1を2.0の映画に変換して見るときに音量つまみをいじる必要があるという問題を解決します。(特に、夜に映画を見ない場合は、 t他の人を起こしたいが、それでも対話を聞くことができるようにしたい)。

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

ただし、なんらかの理由でストリームの全体的な音量を上げたくない場合は、ナイトモードダイアログがおそらく最良のオプションです。ただし、オーディオストリームを両方にエンコードし、2つの波形を慎重に比較することを強くお勧めします。 。

FFmpegのNightmode Dialogue式でダウンミックスするには:

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" 

タルクの答え

この回答は、Shane Harrelsonの回答からのNightmode Dialogueダウンミックス式をコマンドに入れて、MKVコンテナー内のオーディオストリームを変換するだけです。この回答で与えられたコマンドはそのようなオーディオストリームで正常に動作しますが、スタンドアロンのオーディオトラックに適応させるとエラーが発生します。

フィルタリングとstreamcopyを一緒に使用することはできません

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

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


テストコマンド

この回答に対して行ったテストの信頼性を示すために、以下は各ダウンミックスの数式をテストするために使用したすべてのコマンドです。

-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"
23
Hashim

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

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

doom9フォーラムの Robert Collierの提案 として。

10
Shane Harrelson

したがって、 @ Shane Harrelson's と@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の部分は、ビデオストリームが変更されていないことを意味します(video codec設定はcopied)です。それがなければ、それははるかに長くかかります。完全を期すために上記の回答から繰り返すと、-ac 2は2つのオーディオチャネルを意味し、-afはオーディオフィルターを指定します。

コマンドを少し調べたところ、2つのステレオチャンネルの構成方法が設定されていることがわかりました。 FL(フロント左チャンネル)は、元のFC(フロントセンター)プラス0.30*FL(フロント左から30%)プラス0.30*BL(30%左後ろから)など。

4
Tarc

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

-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の使用*フロント/バックレフト/ライトは、これらのチャネルを適切なレベルに下げ、センターを圧倒しないようにします。

2
Dave_750

-ac 2オプションを使用して、音楽もスピーチも他のコンポーネントよりもはるかに多く聞こえるバランスのとれたダウンミックスが得られる場合は、音量を上げるだけで

-vol 512

例では512を使用しました。これにより、サウンドが2倍に大きくなります。ルールは、256は100%に相当します。

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

1
Mephisto
-ac 2

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

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

映画の音声は一方向であり、すべてのチャンネルで最大音圧はありません。したがって、ダウンミックスの音量を下げるのは間違っています。レベルを少し圧縮するのが正しい方法です。それがドルビーが行うことです。

0
user1076138

このページ全体といくつかの実験を読んだ後、「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
Gringo Suave

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