Bagaimana membandingkan mp3, data audio flac dalam file, mengabaikan data header (tag ID3) dll?

16

Saya telah mencadangkan beberapa file audio di 2 tempat dan menambahkan tag ID3 ke dalam satu cadangan tetapi tidak yang lain, karena waktu telah berlalu ingatan saya sendiri telah memudar apakah cadangan sebenarnya sama, tetapi sekarang satu memiliki data ID3 dan lainnya tidak, pembandingan biner dasar akan gagal dan pemeriksaan akan merepotkan.

Apakah ada alat untuk membandingkan hanya data audio (bukan header, ID3) di mp3, file flac, dan file lain menggunakan data header seperti ID3.

memulai utas yang tak terbandingkan di sini: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

akan mempertimbangkan perangkat lunak pembanding lainnya yang melakukan tugas ini

therobyouknow
sumber

Jawaban:

8

Ah, penderitaan abadi. Saya sendiri bergumul dengan pertanyaan ini sejak lama dan mencoba begitu banyak aplikasi pencarian file duplikat yang akhirnya saya menyerah dan memutuskan untuk menulisnya sendiri. Dan kemudian saya menemukan AllDup .

AllDup membuat saya melakukan back-burner tanpa batas untuk proyek saya sendiri karena ini adalah DFF cepat yang memiliki kemampuan untuk membandingkan file MP3 dan JPEG, mengabaikan tag ID3 dan data Exif mereka masing-masing. Bahkan lebih baik, Michael Thummerer sangat responsif terhadap umpan balik dan cepat untuk memperbaiki bug dan mengimplementasikan saran (Anda dapat menyarankan mengabaikan header FLAC). Untuk melengkapi semua ini, AllDup gratis.

Synetech
sumber
6

Inilah cara untuk melakukannya di shell. Anda perlu avconv, yang di Debian / Ubuntu ada di libav-tools.

$ avconv -i INPUT_FILE -c:a copy -f crc - 2>/dev/null | grep CRC

Anda akan mendapatkan garis seperti ini:

CRC=0xabfdfe10

Ini akan membandingkan setiap frame data audio dan menghasilkan CRC untuknya. Jadi perintah seperti ini dapat membandingkan banyak file:

ls *.mp3 | while read line; do echo -n "$line: "; avconv -i "$line" -f crc - 2>/dev/null | grep CRC; done
blujay
sumber
Tidak terlalu cepat, tetapi berfungsi sempurna untuk memiliki checksum unik pada file mp3 untuk memeriksa duplikat. Terima kasih.
fred727
Alternatif yang lebih cepat jika Anda dapat menggunakan php adalah pustaka getid3
fred727
3
@ fred727 Saya memeriksa avconvhalaman manual dan menyadari bahwa crcopsi menerjemahkan audio dan menghitung CRC dari audio yang diterjemahkan. Tetapi Anda dapat menghindarinya dengan mengatur audio codec ke copy. Sekarang, di sistem saya, perintah berjalan dalam 0,13 detik, bukan 1,13 detik. Saya memperbarui jawabannya, jadi sekarang Anda dapat menghindari menggunakan PHP. :)
blujay
2

Foobar2000 dengan plugin Binary Comparator akan melakukan ini.

afrazier
sumber
1
+1 Foobar2000 terlihat FANTASTIS. Mengapa? Karena menggunakan UI asli Windows yang tepat, terlihat bagus dan ringan dan minimalis seperti VNC namun kaya fungsionalitas dan sebenarnya menyediakan informasi dan fitur yang benar-benar diinginkan - seperti panjang lagu, dll. fitur-fitur tidak jelas yang jarang digunakan. Binary Comparator adalah fitur bagus untuk pertanyaan yang saya ajukan. Terima kasih.
therobyouknow
Senang kamu menyukainya!
Afrazier
2

Sebagai solusi yang memungkinkan, Anda dapat menggunakan alat apa pun untuk mengonversi file ke aliran terkompresi ( pcm, wav) tanpa info metadata dan kemudian membandingkannya. Untuk konversi, Anda dapat menggunakan perangkat lunak apa pun yang Anda suka ffmpeg, soxatau avidemux.

Misalnya bagaimana saya melakukannya dengan ffmpeg

Katakanlah saya punya untuk contoh itu 2 file dengan metadata yang berbeda: $ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ Perbandingan kasar memaksa mereka berbeda.

Kemudian kita cukup konversi dan diff tubuh: $ diff <( ffmpeg -loglevel 8 -i Original.mp3 -map_metadata -1 -f wav - ) <( ffmpeg -loglevel 8 -i Possible-dup.mp3 -map_metadata -1 -f wav - ) ; echo $? 0

; echo $?Bagian tentunya hanya untuk tujuan demonstrasi untuk melihat kode kembali.

Memproses banyak file (melintasi direktori)

Jika Anda ingin mencoba duplikat dalam koleksi itu harus layak untuk checksum menghitung (setiap seperti crc, md5, sha2, sha256) data dan kemudian hanya menemukan ada tabrakan.

Meskipun di luar ruang lingkup pertanyaan itu saya akan menyarankan beberapa saran sederhana bagaimana menemukan duplikat file dalam direktori akuntansi hanya isinya tanpa pertimbangan metadata.

  1. Pertama menghitung hash data di setiap file (dan menempatkan ke dalam file untuk diproses selanjutnya): for file in *.mp3; do printf "%s:%s\n" "$( ffmpeg -loglevel 8 -i "$file" -map_metadata -1 -f wav - | sha256sum | cut -d' ' -f1 )" "$file"; done > mp3data.hashes File akan terlihat seperti: $ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 Setiap RDBMS akan sangat membantu di sana untuk menghitung jumlah dan memilih data tersebut. Tapi teruskan solusi command-line murni Anda mungkin ingin melakukan langkah-langkah sederhana seperti lebih lanjut.

Lihat duplikat hash jika ada (langkah ekstra untuk menunjukkan cara kerjanya, tidak diperlukan untuk menemukan dupes): $ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes [1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1 [1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2 [1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1

  1. Dan bersama-sama daftar file yang digandakan berdasarkan konten : $ grep mp3data.hashes -f <( count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes | grep -oP '(?<=\[1:).{64}(?!]=1$)' ) | sort 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3

count.by.regexp.awk adalah awkskrip sederhana untuk menghitung pola regexp.

Hubbitus
sumber
1
+1 terima kasih Hubbitus - solusi mandiri yang bagus berdasarkan open-source. Senang mendengarnya. Juga berguna untuk dimasukkan ke dalam batch.
therobyouknow
1

Saya juga menanyakan ini di forum Beyond Compare, seperti yang disebutkan dalam pertanyaan - dan Beyond Compare juga memberikan solusi:

http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

Kedua pendekatan tersebut layak dipertimbangkan:

  • solusi AllDup yang terbaik jika Anda tidak peduli tentang salinan file mana yang disimpan dan yang dibuang di pohon folder direktori DAN Anda memiliki campuran file yang ditandai dan yang tidak ditandai dalam folder yang sama yang Anda ingin menjalankan duplikat cek.

  • Beyond Compare adalah yang terbaik jika Anda ingin mempertahankan pohon diectory / folder DAN membandingkan 2 struktur folder / direktori yang terpisah, dibantu juga dengan menggunakan opsi on-the-fly non-destructive flatten-tree option

therobyouknow
sumber