วิธีเปรียบเทียบ mp3, ข้อมูลเสียง flac ในไฟล์, ละเว้นข้อมูลส่วนหัว (แท็ก ID3) ฯลฯ ?


16

ฉันได้ทำการสำรองไฟล์เสียงบางไฟล์ใน 2 แห่งและเพิ่มแท็ก ID3 ลงในการสำรองข้อมูลหนึ่งครั้ง แต่ไม่ใช่ไฟล์อื่นเนื่องจากเวลาผ่านไปแล้วหน่วยความจำของฉันเองก็จางหายไปไม่ว่าการสำรองข้อมูลจะเหมือนกันจริงหรือไม่ อื่น ๆ ไม่ได้การเปรียบเทียบไบนารีพื้นฐานจะล้มเหลวและการตรวจสอบจะยุ่งยาก

มีเครื่องมือในการเปรียบเทียบข้อมูลเสียง (ไม่ใช่ส่วนหัว, ID3) ใน mp3s, ไฟล์ flac และไฟล์อื่น ๆ ที่ใช้ข้อมูลส่วนหัวเช่น ID3

เริ่มหัวข้อเปรียบเทียบที่นี่: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

จะพิจารณาซอฟต์แวร์เปรียบเทียบอื่น ๆ ที่ทำงานนี้

คำตอบ:


8

อาชะตานิรันดร์ ตัวฉันเองก็ต้องดิ้นรนกับคำถามนี้มานานแล้วและได้ลองใช้แอพหาไฟล์ซ้ำหลายครั้งจนในที่สุดฉันก็ยอมแพ้และตัดสินใจที่จะเขียนด้วยตัวเอง และจากนั้นผมพบว่าAllDup

AllDup ทำให้ฉันกลับมาเขียนใหม่อย่างไม่มีกำหนดเพราะเป็นDFF ที่รวดเร็วที่มีความสามารถในการเปรียบเทียบไฟล์ MP3 และ JPEG โดยไม่สนใจแท็ก ID3 และข้อมูล Exif ตามลำดับ ยิ่งไปกว่านั้น Michael Thummerer ตอบสนองต่อข้อเสนอแนะได้อย่างรวดเร็วและสามารถแก้ไขข้อบกพร่องและใช้คำแนะนำได้อย่างรวดเร็ว (คุณสามารถแนะนำให้ละเว้นส่วนหัวของ FLAC) ไปด้านบนมันทั้งหมด AllDup ฟรี


6

นี่คือวิธีทำที่เชลล์ คุณต้องavconvซึ่งใน Debian / 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

ไม่เร็วมาก แต่ทำงานอย่างสมบูรณ์แบบเพื่อให้มีการตรวจสอบที่ไม่ซ้ำกันในไฟล์ mp3 เพื่อตรวจสอบรายการที่ซ้ำกัน ขอขอบคุณ.
fred727

ทางเลือกที่เร็วกว่าหากคุณสามารถใช้ php คือไลบรารีgetid3
fred727

3
@ fred727 ฉันตรวจสอบavconvman page และตระหนักว่าcrcตัวเลือกถอดรหัสเสียงและคำนวณ CRC ของเสียงที่ถอดรหัส copyแต่คุณสามารถหลีกเลี่ยงโดยการตั้งค่าตัวแปลงสัญญาณเสียง ตอนนี้ในระบบของฉันคำสั่งทำงานใน 0.13 วินาทีแทน 1.13 วินาที ฉันอัปเดตคำตอบดังนั้นตอนนี้คุณสามารถหลีกเลี่ยงการใช้ PHP :)
blujay

2

Foobar2000พร้อมปลั๊กอินตัวเปรียบเทียบไบนารีจะทำเช่นนี้


1
+1 Foobar2000 ดูยอดเยี่ยม ทำไม? เนื่องจากใช้ UIs ที่เหมาะสมของ Windows ดูดีและมีน้ำหนักเบาและเรียบง่ายเช่น VNC แต่เต็มไปด้วยฟังก์ชั่นและให้ข้อมูลและฟีเจอร์ที่ต้องการอย่างแท้จริงเช่นความยาวเพลงเป็นต้น Windows Media Player และ WinAmp ขาดการแสดงข้อมูลนี้ คุณสมบัติปิดบังที่ไม่ค่อยจะใช้ Binary Comparator เป็นคุณสมบัติที่ยอดเยี่ยมสำหรับคำถามที่ฉันถาม ขอบคุณ
therobyouknow

ดีใจที่คุณชอบมัน!
afrazier

2

คุณอาจใช้เครื่องมือใด ๆ ในการแปลงไฟล์เป็นสตรีมที่ไม่บีบอัด ( pcm, wav) โดยไม่มีข้อมูลเมตาดาต้าและเปรียบเทียบ สำหรับการแปลงคุณอาจใช้ซอฟต์แวร์ใด ๆ ที่คุณต้องชอบffmpeg, หรือsoxavidemux

เช่นวิธีที่ฉันทำกับ 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 $?ส่วนนอกหลักสูตร เป็นเพียงการสาธิตเพื่อดูรหัสส่งคืน

การประมวลผลหลายไฟล์ (ไดเรกทอรีสำรวจ)

หากคุณต้องการที่ซ้ำกันพยายามในการเก็บรวบรวมมันคุ้มค่าที่จะมีการคำนวณ checksums (ใด ๆ เช่น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.awkเป็นawkสคริปต์ที่ง่ายต่อการนับรูปแบบ regexp


1
+1 ขอบคุณ Hubbitus - โซลูชั่นครบวงจรที่ดีบนพื้นฐานของโอเพ่นซอร์ส ดีแล้วที่รู้. ยังมีประโยชน์สำหรับการใส่แบทช์
therobyouknow

1

ฉันถามคำถามนี้ในฟอรัม Beyond Compare ตามที่กล่าวไว้ในคำถาม - และ Beyond Compare ก็มีวิธีแก้ปัญหาเช่นกัน:

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

ทั้งสองวิธีมีมูลค่าการพิจารณา:

  • โซลูชัน AllDup นั้นดีที่สุดถ้าคุณไม่สนใจว่าสำเนาของไฟล์ใดที่ถูกสงวนไว้และถูกทิ้งในแผนผังโฟลเดอร์ไดเรกทอรีและคุณมีไฟล์ที่ติดแท็กและไม่ติดแท็กไว้ในโฟลเดอร์เดียวกันที่คุณต้องการเรียกใช้ ตรวจสอบซ้ำ

  • นอกเหนือจากการเปรียบเทียบจะดีที่สุดถ้าคุณต้องการเก็บแผนผังต้นไม้ / โฟลเดอร์และเปรียบเทียบโครงสร้างโฟลเดอร์ / ไดเรกทอรีแยกกัน 2 ตัวช่วยด้วยการใช้ออปชั่นแบนราบแบบทำลายไม่ทำลาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.