Bir dosyadaki mp3, flac ses verileri, başlık verileri (ID3 etiketi) vb.


16

Bazı ses dosyalarını 2 yerde yedekledim ve ID3 etiketlerini bir yedeklemeye ekledim, ancak diğerine değil, zaman geçtiği için kendi hafızam yedeklemelerin gerçekten aynı olup olmadığı konusunda solmuş, ancak şimdi bir ID3 verisi ve diğer yapmazsa, temel ikili karşılaştırma başarısız olur ve denetim hantal olur.

MP3, flac dosyaları ve ID3 gibi üstbilgi verilerini kullanan diğer dosyalarda yalnızca ses verilerini (başlık, ID3 değil) karşılaştırmak için bir araç var mı?

karşılaştırmak ötesinde bir konu başlattı: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

bu görevi yapan diğer karşılaştırma yazılımlarını dikkate alır

Yanıtlar:


8

Ah, sonsuz durum. Kendim bu soruyla bu kadar uzun süre mücadele ettim ve sonunda o kadar çok yinelenen dosya bulma uygulaması denedim ve sonunda vazgeçtim ve kendim yazmaya karar verdim. Sonra AllDup'ı buldum .

AllDup beni kendi projemi sonsuza kadar geri yaktı, çünkü MP3 ve JPEG dosyalarını karşılaştırma, ID3 etiketlerini ve Exif verilerini görmezden gelme hızlı bir DFF. Daha da iyisi, Michael Thummerer geri bildirime karşı çok duyarlıdır ve hataları düzeltmek ve önerileri uygulamak için hızlıdır (FLAC başlıklarını göz ardı etmeyi önerebilirsiniz). Her şeyin üstesinden gelmek için AllDup ücretsizdir.


6

İşte bunu kabukta yapmanın bir yolu. avconvDebian / Ubuntu'da olan ihtiyacınız var libav-tools.

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

Bunun gibi bir çizgi alacaksınız:

CRC=0xabfdfe10

Bu, ses verilerinin her karesini karşılaştırır ve bunun için bir CRC oluşturur. Yani böyle bir komut birden fazla dosyayı karşılaştırabilir:

ls *.mp3 | while read line; do echo -n "$line: "; avconv -i "$line" -f crc - 2>/dev/null | grep CRC; done

Çok hızlı değil, ancak kopyaları kontrol etmek için mp3 dosyalarında benzersiz bir sağlama toplamı olması için mükemmel bir şekilde çalışın. Teşekkür ederim.
fred727

Php kullanabiliyorsanız daha hızlı bir alternatif getid3 kütüphanesidir: getid3.org/phpBB3/viewtopic.php?f=3&t=1936
fred727

3
@ fred727 avconvMan sayfasını kontrol ettim ve crcseçeneğin sesi deşifre ettiğini ve deşifre edilmiş sesin CRC'sini hesapladığını fark ettim . Ancak ses codec'ini ayarlayarak bundan kaçınabilirsiniz copy. Şimdi, sistemimde, komut 1.13 saniye yerine 0.13 saniye içinde çalışıyor. Cevabı güncelledim, şimdi PHP kullanmaktan kaçınabilirsiniz. :)
blujay

2

İkili Karşılaştırıcı eklentisine sahip Foobar2000 bunu yapacaktır.


1
+1 Foobar2000 FANTASTİK görünüyor. Neden? Uygun Windows yerel kullanıcı arayüzlerini kullandığından, VNC gibi güzel ve hafif ve minimalist görünüyor, ancak işlevsellik açısından zengin ve aslında şarkı uzunluğu vb. Gibi gerçekten istediği bilgileri ve özellikleri sağlıyor . Windows Media Player ve WinAmp bu bilgileri göstermiyor ve bunun yerine belirgin nadiren kullanacağı belirsiz özellikler. İkili Karşılaştırıcı, sorduğum soru için harika bir özellik. Teşekkürler.
therobyouknow

Beğendiğine sevindim!
afrazier

2

Mümkün olan bir çözüm pcm, wavmeta veri bilgisi olmadan dosyayı sıkıştırılmamış akışa ( , ) dönüştürmek ve daha sonra karşılaştırmak için herhangi bir aracı kullanabilirsiniz . Dönüşüm için size sizin gibi sahip herhangi bir yazılım kullanabilir ffmpeg, soxya da avidemux.

Örneğin bunu ffmpeg ile nasıl yaparım

Diyelim ki bu örnek için farklı meta verilere sahip 2 dosya var: $ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ Kaba kuvvet karşılaştırması farklı olduklarından şikayet ediyor.

Sonra sadece vücudu dönüştürüyoruz ve farklılaştırıyoruz: $ 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

Ders dışı ; echo $?kısmı sadece gösteri amacıyla dönüş kodunu görmek içindir.

Birden fazla dosya işleme (dizinler arasında gezinme)

Eğer koleksiyonunda çiftleri denemek isterseniz o hesapla toplamlarını için yetmeyecek kadar (eğer böyle crc, md5, sha2, sha256) verilerin ve sonra sadece orada çarpışmalara bulabilirsiniz.

Her ne kadar bu sorunun kapsamı dışında olsa da, ben sadece meta veri dikkate olmadan içeriği muhasebesi dosyalarının kopyalarını bulmak için bazı basit öneriler öneririz.

  1. Önce her dosyadaki veri karmasını hesaplayın (ve sonraki işlemler için dosyaya yerleştirin): 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 Dosya şöyle görünecektir: $ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 Herhangi bir RDBMS, bu tür verileri toplamak ve seçmek için orada çok yardımcı olacaktır. Ancak devam etmek isteyebileceğiniz saf komut satırı çözümüne devam edin.

Varsa yinelenen karma değerlerine bakın (nasıl çalıştığını göstermek için ek adım, dupes bulma için gerekli değildir): $ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes [1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1 [1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2 [1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1

  1. Ve hep birlikte içerik tarafından kopyalanan dosyaları listelemek için : $ 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 normal ifadeleri saymak için basit bir awkkomut dosyasıdır.


1
+1 teşekkürler Hubbitus - açık kaynak kodlu güzel ve bağımsız bir çözüm. Bunu bildiğim iyi oldu. Bir partiye koymak için de yararlıdır.
therobyouknow

1

Bunu, soruda belirtildiği gibi Beyond Compare forumunda da sordum - ve Beyond Compare de bir çözüm sunuyor:

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

Her iki yaklaşım da dikkate alınmaya değer:

  • AllDup çözümü, dosyaların hangi kopyalarının korunduğunu ve hangilerinin bir dizin klasör ağacında atıldığını umursamıyorsanız ve dosyayı çalıştırmak istediğiniz aynı klasörlerde etiketlenmiş ve etiketlenmemiş dosyaların bir karışımına sahipseniz en iyisidir. yinelenen denetim.

  • Eğer dizini / klasör ağacını korumak istiyorsanız, uçuşta tahribatsız düz ağaç seçeneğini kullanarak da yardımcı olan 2 ayrı klasör / dizin yapısını karşılaştırmak istiyorsanız Karşılaştırmanın ötesinde en iyisidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.