プログラムでmp3を比較できるのが好きです。何だかわからない問題。ヘッダ?ヒストグラム?チャンネル?誰もこのテーマの経験がありますか?
9 に答える
私は音声フィンガープリンティングに関する修士論文を書きました。この論文では、音楽がどのように聞こえるかを比較する問題に対するいくつかのオープンソースのソリューションをリストし、それらのパフォーマンスの比較を提供しています。やり過ぎかもしれませんが、本当にまともなアプリケーションがいくつかあります。
タグ付けされたデータのみで比較したい場合、調べる基準はID3です。基本的に 2 つのバージョンがあり、1 つ目は非常にシンプル (ID3v1) で、MP3 の末尾にある 128 バイトのブロックで構成されています。ID3v2 は、MP3 の先頭に、より大きな可変サイズのブロックを配置します。
私はあなたがこれに取ることができるいくつかのアプローチがあると思います:
1.タグを比較します
mp3のタグに保持されているデータを比較できます。タグはID3形式で保持されます。タグへのアクセスに役立つライブラリがいくつかあります。tagLibは人気のある選択肢です(.netアプリの場合はTagLib Sharp )
2.音響指紋
これは断然最も堅牢な方法であり、圧縮や形式に関係なく一致するものを見つけることができます。ファイルの実際のオーディオから一意の指紋が作成され、曲を識別できるようになります。エコープリントは、このオープンソースの例です。
3.ファイルからハッシュを作成する
これは、完全に一致するコンテンツを含むファイルを見つけることができるより迅速な方法です。
さらに読む:
比較するとはどういう意味ですか?メタデータ(作成者、タイトルなど)、オーディオデータ?どのような目的で?
オーディオデータを比較する一般的で基本的な方法は、MFCCなどのいくつかのスペクトル機能である種の距離を計算することです。
http://en.wikipedia.org/wiki/Mel_frequency_cepstral_coefficient
あなたの質問によりよく答えるには、あなたが何をしようとしているのかを正確に知る必要があると思います.
実際の曲を比較したい場合は、musicDNS にオーディオ フィンガープリントを作成できるライブラリがあります。libOFA というライブラリは、ここにあります。このフィンガープリンティング システムは、musicbrainz などで使用され、デジタル オーディオ ファイルをデータベースと照合します。理論的には、これを使用して 2 つの異なるデジタル ファイルを比較できます。
タグ データ (id3v1/id3v2) を比較したい場合は、それを行うことができるライブラリがたくさんあります。
libOFA アプローチの良い点は、フィンガープリントがオーディオ自体で行われるため、異なるフォーマットを相互に比較できることです。
すべてのヘッダー、gfx、およびその他の情報を無視してオーディオを比較するための php を作成しました。基本的に、$src として foreach のファイル リストから: /usr/bin/ffmpeg -hide_banner -y -i "$src" -f s16le -acodec pcm_s16le output.raw 2> /dev/null md5 output.raw ファイル (これを記録) )、他の人と比較してください。変換されたファイルは生の出力オーディオであり、ハッシュの作成以外には使用されません。私のスクリプトで予想される唯一の問題は、変換/ハッシュ後に低品質のファイルを保持するか、ID3 タグの少ないファイルを保持することです。削除するのではなく移動しますが、古いファイルはまだ残っています。
タグに基づいてmp3を比較するだけの場合は、taglibをお勧めします。
Linuxでfdupesを頻繁に使用して、重複ファイルを見つけます。fdupes は md5 チェックサムを使用します。