एमपी 3 की तुलना कैसे करें, एक फाइल में flac ऑडियो डेटा, हेडर डेटा (ID3 टैग) आदि की अनदेखी?


16

मैंने कुछ ऑडियो फ़ाइलों को 2 स्थानों पर बैकअप लिया है और ID3 टैग को एक बैकअप में जोड़ा है, लेकिन दूसरे में नहीं, क्योंकि समय बीतने के साथ मेरी अपनी स्मृति फीकी पड़ गई है कि क्या बैकअप वास्तव में समान हैं, लेकिन अब ID3 डेटा और है अन्य नहीं है, बुनियादी बाइनरी तुलना विफल हो जाएगी और निरीक्षण बोझिल हो जाएगा।

क्या एमपी 3, फ्लैक फ़ाइलों और आईडी 3 जैसे हेडर डेटा का उपयोग करके केवल ऑडियो डेटा (हेडर नहीं, आईडी 3) की तुलना करने के लिए एक उपकरण है।

यहाँ तुलना से परे एक सूत्र शुरू किया: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

अन्य तुलना सॉफ्टवेयर पर विचार करेगा जो यह कार्य करता है

जवाबों:


8

आह, शाश्वत दुर्दशा। मैं खुद इतने लंबे समय तक इस सवाल से जूझता रहा और इतने सारे डुप्लिकेट-फ़ाइल खोजने वाले ऐप की कोशिश की, जो मैंने अंततः छोड़ दी और खुद को लिखने का फैसला किया। और फिर मैंने पाया AllDup

AllDup ने मुझे अनिश्चित काल के लिए अपने ही प्रोजेक्ट को बैक-बर्नर बना दिया क्योंकि यह एक तेज़ DFF है जिसमें MP3 और JPEG फ़ाइलों की तुलना करने की क्षमता है, क्रमशः उनके ID3 टैग और Exif डेटा को अनदेखा कर रहे हैं। इससे भी बेहतर, माइकल थुम्मर फीडबैक के लिए बहुत उत्तरदायी है और बग्स को ठीक करने और सुझावों को लागू करने के लिए त्वरित है (आप FLAC हेडर को अनदेखा करने का सुझाव दे सकते हैं)। यह सब बंद करने के लिए, AllDup मुफ्त है।


6

यहां इसे शेल में करने का एक तरीका है। आप की जरूरत है avconv, जो डेबियन / Ubuntu में है libav-tools

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

आपको इस तरह एक लाइन मिलेगी:

CRC=0xabfdfe10

यह ऑडियो डेटा के हर फ्रेम की तुलना करेगा और इसके लिए एक CRC उत्पन्न करेगा। तो इस तरह एक कमांड कई फाइलों की तुलना कर सकता है:

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

बहुत तेज़ नहीं है, लेकिन डुप्लिकेट की जांच करने के लिए एमपी 3 फ़ाइलों पर एक अद्वितीय चेकसम होने के लिए पूरी तरह से काम करते हैं। धन्यवाद।
fred727

यदि आप php का उपयोग कर सकते हैं तो एक तेज़ विकल्प है getid3 पुस्तकालय: getid3.org/phpBB3/viewtopic.php?f=3&t=1936
fred727

3
@ fred727 मैंने avconvमैन पेज चेक किया और महसूस किया कि crcविकल्प ऑडियो को डिकोड करता है और डिकोड किए गए ऑडियो के सीआरसी की गणना करता है। लेकिन आप ऑडियो कोडेक को सेट करके इससे बच सकते हैं copy। अब, मेरे सिस्टम पर, कमांड 1.13 सेकंड के बजाय 0.13 सेकंड में चलता है। मैंने उत्तर को अपडेट कर दिया है, इसलिए अब आप PHP का उपयोग करने से बच सकते हैं। :)
ब्ल्यूज

2

Foobar2000 द्विआधारी तुलनित्र प्लगइन के साथ यह करेंगे।


1
+1 Foobar2000 FANTASTIC दिखता है। क्यों? क्योंकि यह उचित Windows देशी UI का उपयोग करता है, अच्छा और हल्का और कम से कम VNC जैसा दिखता है जो अभी तक कार्यक्षमता में समृद्ध है और वास्तव में जानकारी और सुविधाएँ प्रदान करता है - जैसे कि गीत की लंबाई आदि जैसे Windows Media Player और WinAmp में इस जानकारी को दिखाने की कमी है और इसके बजाय इसे प्रमुखता से रखा गया है। अस्पष्ट विशेषताएँ जो शायद ही कभी इस्तेमाल होती हैं। द्विआधारी तुलनित्र उस प्रश्न के लिए एक महान विशेषता है जो मैं पूछ रहा हूं। धन्यवाद।
उपचार

खुश हूँ कि आपने इसे पसंद किया!
21

2

संभव समाधान के रूप में आप मेटाडेटा जानकारी के बिना फ़ाइल को असम्पीडित स्ट्रीम ( pcm, wav) में बदलने के लिए किसी भी उपकरण का उपयोग कर सकते हैं और फिर उसकी तुलना कर सकते हैं। रूपांतरण के लिए आप अपने पसंद के किसी भी सॉफ़्टवेयर का उपयोग कर सकते हैं ffmpeg, soxया avidemux

उदाहरण के लिए मैं ffmpeg के साथ ऐसा कैसे करता हूं

मान लें कि मेरे पास विभिन्न मेटाडेटा के साथ 2 उदाहरण हैं: $ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ ब्रूट बल की तुलना में वे भिन्न हैं।

तब हम सिर्फ शरीर को रूपांतरित और परिवर्तित करते हैं: $ 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 $?हिस्सा रिटर्न कोड देखने के लिए प्रदर्शन उद्देश्य के लिए है।

एकाधिक फ़ाइलों को संसाधित करना (ट्रैवर्स डाइरेक्टरी)

आप संग्रह में डुप्लिकेट की कोशिश करना चाहते हैं यह calculate चेकसम को लायक है (किसी भी तरह crc, md5, sha2, sha256) डेटा की और फिर बस वहाँ टकराव पाते हैं।

यद्यपि यह उस प्रश्न के दायरे से बाहर है, मैं कुछ सरल सुझाव सुझाऊंगा कि कैसे निर्देशिका लेखा में फ़ाइलों के डुप्लिकेट को खोजने के लिए केवल यह मेटाडेटा विचार के बिना सामग्री।

  1. प्रत्येक फ़ाइल में पहले डेटा की हैश की गणना करें (और अगली प्रोसेसिंग के लिए फ़ाइल में रखें): 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 फ़ाइल इस तरह दिखाई देगी: $ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 कोई भी RDBMS इस तरह के डेटा को एकत्रित करने और चुनने के लिए बहुत मददगार होगा। लेकिन शुद्ध कमांड-लाइन समाधान जारी रखें जो आप आगे की तरह सरल कदम कर सकते हैं।

डुप्लिकेट हैश को देखें यदि कोई हो (अतिरिक्त कदम यह दिखाता है कि यह कैसे काम करता है, डुप्लिकेट खोजने के लिए आवश्यक नहीं है): $ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes [1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1 [1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2 [1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1

  1. और सभी सामग्री द्वारा डुप्लिकेट फ़ाइलों को सूचीबद्ध करने के लिए एक साथ : $ 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.awkawk regexp पैटर्न को गिनने की सरल स्क्रिप्ट है।


1
+1 धन्यवाद हबबिटस - ओपन-सोर्स पर आधारित एक अच्छा आत्म-निहित समाधान। जानकार अच्छा लगा। बैच में डालने के लिए भी उपयोगी है।
उपनिवेशकाल

1

मैंने बियॉन्ड तुलना मंच पर यह भी पूछा, जैसा कि प्रश्न में उल्लेख किया गया है - और बियॉन्ड तुलना भी एक समाधान प्रदान करती है:

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

दोनों दृष्टिकोण विचार करने योग्य हैं:

  • AllDup समाधान सबसे अच्छा है यदि आप इस बात की परवाह नहीं करते हैं कि फाइलों की कौन सी प्रतियाँ संरक्षित हैं और जिन्हें निर्देशिका फ़ोल्डर ट्री में छोड़ दिया गया है और आपके पास उन्हीं फ़ोल्डरों में टैग की गई और गैर-टैग की गई फ़ाइलों का मिश्रण है, जिन्हें आप चलाना चाहते हैं पर डुप्लीकेट चेक।

  • परे की तुलना सबसे अच्छा है यदि आप डायरी / फ़ोल्डर ट्री को बनाए रखना चाहते हैं और 2 अलग फ़ोल्डर / निर्देशिका संरचनाओं की तुलना करते हैं, तो ऑन-द-फ्लाई गैर-विनाशकारी समतल-पेड़ विकल्प का उपयोग करके भी मदद की जाती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.