Як порівняти mp3, flac аудіодані у файлі, ігноруючи дані заголовка (тег ID3) тощо?


16

Я створив резервну копію аудіофайлів у двох місцях і додав теги ID3 в одну резервну копію, але не в іншу, оскільки минув час, коли моя власна пам'ять згасла, чи є резервні копії насправді однаковими, але тепер у них є дані ID3 та інше ні, базове бінарне порівняння не вдасться, і перевірка буде громіздкою.

Чи є інструмент для порівняння лише аудіоданих (не заголовка, ID3) у форматі mp3, flac-файли та інших файлах, використовуючи дані заголовка, такі як ID3.

запустив нитку на тему "Більше порівнянь" тут: http://www.scootersoftware.com/vbulletin/showthread.php?t=7413

буде розглянути інше програмне забезпечення для порівняння, яке робить це завдання

Відповіді:


8

Ах, вічне становище. Я сам так довго боровся з цим питанням і спробував так багато додатків для пошуку дублікатів файлів, що я врешті відмовився і вирішив написати сам. І тоді я знайшов AllDup .

AllDup зробив мене на невизначений час своїм власним проектом, тому що це швидкий DFF, який має можливість порівнювати MP3 та JPEG файли, ігноруючи їхні теги ID3 та дані Exif відповідно. Ще краще, що Майкл 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 і зрозумів, що crcпараметр декодує аудіо та обчислює CRC декодованого аудіо. Але уникнути цього можна, встановивши звуковий кодек на copy. Тепер у моїй системі команда працює за 0,13 секунди замість 1,13 секунди. Я оновив відповідь, тож тепер ви можете уникнути використання PHP. :)
blujay

2

Foobar2000 із плагіном Binary Comparator зробить це.


1
+1 Foobar2000 виглядає FANTASTIC. Чому? Оскільки він використовує належні користувальницькі інтерфейси Windows, виглядає приємно, легко і мінімалістично, як VNC, але багатий функціоналом і фактично надає інформацію та функції, які дуже хочеться - наприклад, довжина пісні тощо. Windows Media Player та WinAmp не мають такої інформації та замість цього помітно поміщають незрозумілі функції, якими рідко користуватися. Бінарний компаратор - відмінна особливість для питання, яке я задаю. Спасибі.
therobyouknow

Радий, що тобі подобається!
afrazier

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 $?Частина поза курсом призначена лише для демонстрації, щоб побачити код повернення.

Обробка декількох файлів (перехідні каталоги)

Якщо ви хочете спробувати дублікати в колекції він має цінність для підрахунку контрольних сум (будь- , як 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скрипт для підрахунку шаблонів регулярних виразів.


1
+1 спасибі Hubbitus - приємне автономне рішення, засноване на відкритому коді. Добре знати. Також корисно для складання партії.
therobyouknow

1

Я також запитав це на форумі Beyond Compare, про що йдеться у запитанні, - і Beyond Compare також пропонує рішення:

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

Обидва підходи варто врахувати:

  • Рішення AllDup найкраще, якщо вам не важливо, які копії файлів зберігаються та які відкидаються у дереві папок каталогів. І у вас є поєднання тегів та файлів, що не позначаються тегами, у тих самих папках, якими ви хочете запустити дублікат реєстрації на.

  • Більше порівняння найкраще, якщо ви хочете зберегти дієтичне дерево / дерево папок І порівнюєте 2 окремі структури папок / каталогів, що також допомагає, використовуючи функцію неруйнівного згущення дерева на ходу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.