web-dev-qa-db-ja.com

トラックがモノラルかステレオかを確認するにはどうすればよいですか?

特に古い音楽アルバムを調査する場合、オーディオトラックがモノラルまたはステレオで録音されているかどうかを信頼できる方法で確認する必要がある場合があります。
ファイルを開くときにAudacityがこれを通知しないと信じる理由があります( ビートルズのプリーズプリーズミーの2009年モノリマスター はステレオとして表示されます)。

2
user598527

stereo-fileの両方のチャネルに同じモノトラックがあるかどうかを確認する1つの方法は、チャネルの1つを位相反転することです(たとえば、左の1つ)をもう一方のチャネルに追加します。 (したがって、私たちは 位相コヒーレンス を探しています)

私は大胆さをあまり頻繁に使用しないので、それがそのようなことを行うことができるかどうかはわかりませんが、ここにあなたが望むことをする小さなFFmpeg構文があります:

ffmpeg -i 'is_this_stereo.wav' -filter_complex "stereotools=phasel=1" -ac 1 'output.wav'

(他のオーディオコーデックでも機能します-WAVのようなロスレスフォーマットを出力すると、エンコーディングによって何も削除されないことが保証されます)

そのFFmpeg-scriptの機能:左チャネルの位相を反転し、両方のチャネルを1つの新しいチャネルに合計します。

-ac 1の代わりに、filter_complexチェーンをstereotools=phasel=1[tmp];[tmp]pan=1c:c0=0.5*c0+0.5*c1に変更することもできます。しかし、これは必要ないと思います。

次に、新しく作成されたファイルを見て、波形に平らな線が表示されている場合、元のファイルの左側のチャネルは右側のチャネルとまったく同じです。ピークが非常に小さい場合(たとえば、約-60dB以下)、違いはおそらくエンコードアーティファクトが原因です-それを聞いて確認してください

コードソース:

4
flolilo

コメントで述べたように、ステレオファイルとステレオ録音の間には根本的な違いがあります。

単一のオーディオソースから両方のステレオチャンネルが供給されるファイルの作成を妨げるものは何もありません。 CD用にリマスターされた古い録音の標準。

ステレオファイルに実際にステレオフォニックコンテンツが含まれているかどうかを知る一般的な方法は、両方のチャネルで1秒あたりのゼロパス数の2次和を計算することです。 Audacityや他のフリーソフトウェアツールにこのビルトインがあるかどうかはわかりません。

人間の目はチャンネルの違いを見つけるのに非常に優れていることがわかったので、チェックする録音の数が少ない場合、これがステレオであるかどうかにかかわらず、ウェーブグラフ(大胆さによって生成される)はあなたに良い感触を与えるはずです。

2
Eugen Rieck

私はコンピューターに退屈な仕事をさせることを好むので、フロリロの答えから始めて、私は結局:

ffmpeg -i is_this_stereo.wav -filter_complex 'pan=mono|c0=0.5*FL+-0.5*FR,silenceremove=start_periods=1' -f null -

これは、入力ファイルのチャネルが正確なレプリカ(少なくとも1つのCD用)である場合、「出力ファイルが空です。何もエンコードされていません」という警告を表示します。 silenceremove filter を緩和して、たとえばsilenceremove=start_periods=1:start_threshold=0.02start_threshold=-17dBなどのノイズを無視することもできますが、その相対的な振幅は、録音レベルではなくPCM機能に関連しています。一部のCDの場合、この値は微妙ですが非常に聞こえるステレオを除外します。他の人にとっては、それは最小限です。

-f null -部分は、コンソールメッセージで十分な場合に備えて、ファイル出力を抑制するだけですが、もちろん、差分ファイルを書き込むようにすることもできます。スクリプトの単一性を確認するために、私が思いついた最善の方法は次のとおりです。

out=$(ffmpeg -nostdin -loglevel error -i "$infile" -filter_complex 'pan=mono|c0=0.5*FL+-0.5*FR,silenceremove=start_periods=1:detection=peak' -t 0.00002 -f crc -)
if [ "$out" == 'CRC=0x00000001' ]
then echo "$infile is definitely mono"
fi

そのスクリプトフラグメントでは:

  • 時間制限-t 0.00002は、差を1サンプル(標準の44,100サンプル/秒のCDコンテンツの場合)に削減します。これにより、ステレオファイルでの検出が大幅に高速化されます。私のシステムでは-frames 1は同じ結果になりますが、フレームに複数のサンプルが含まれているため、これが想定されているかどうかはわかりません。 -fs 1は1バイトを比較的はるかに超えています。
  • -f crcは、出力をASCIIのものとして書き込みます。これは、スクリプトでの処理がはるかに簡単です。 1つの16ビットサンプルが無音除去装置を通過する場合、32ビットCRCは初期値の1から変更する必要があると思います。 -f md5または-f hashも使用できます。
  • 下のテストではなくoutを個別に割り当てることにより、シェルの-eオプションを使用した場合にスクリプトがエラーで停止することが保証されます。
1
Stein