|
FoxSD
Стаж: 16 лет 7 месяцев Сообщений: 7543
|
FoxSD ·
20-Фев-15 11:33
(9 лет 9 месяцев назад, ред. 06-Янв-17 19:53)
AUDIO CRC
Часто бывает необходимо сравнить два аудиофайла, чтобы убедиться в их идентичности. Например, в случае сомнений в правильности конвертации из одного формата в другой или когда нет уверенности, что имеющийся файл соответствует полученному при создании рипа. Для подобной проверки можно сравнить CRC файлов. CRC или Циклический избыточный код (Cyclic redundancy check) — алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных. Для аудиофайлов задача нахождения и сравнения CRC усложняется тем, что файлы могут отличаться тегами, и вообще быть в разных форматах. Поэтому во многих случаях не имеет смысла сравнивать CRC самих файлов, а нужно рассматривать только аудиоданные. В этой связи, оказываются бесполезными многие программы, считающие хэш-суммы. Именно контрольная сумма аудиоданных (CRC) присутствует в отчётах программы Exact Audio Copy (EAC). В зависимости от типа рипа она вычисляется или для всего образа или для каждого трека в отдельности.
Расчёт CRC, в зависимости от настроек программы, может быть выполнен двумя способами: 1) при подсчёте учитываются все семплы аудиоданных; 2) нулевые семплы аудиоданных при подсчёте игнорируются. Информация о применявшемся способе вычислений также содержится в отчёте EAC:
CUE Corrector позволяет вычислять CRC аудиоданных, как для отдельных файлов так и для всех файлов рипа. При этом CRC рассчитываются для всего рипа и для каждого трека отдельно согласно имеющейся в отчёте EAC разметке – TOC-блоку.
Для многих распространенных форматов даже не требуется предварительная конвертация в wav т.к. CUE Corrector необходимые преобразования делает самостоятельно без создания временных файлов на диске. Для расчёта CRC одного аудиофайла укажите в проводнике нужный файл и в контекстном меню выберите пункт Вычислить EAC CRC.
Результаты вычислений будут показаны в новом окне:
В отчёте присутствует следующая информация: 1) Номер версии и сборки CUE Corrector, создавшего отчет; 2) Технические данные проверенного файла: название, время звучания, формат, частота дискретизации, количество каналов и разрядность семплирования; 3) Сведения об аудио из тегов файла: автор и название альбома, номер, название и исполнитель трека. 4) CRC, рассчитанные с учетом и без нулевых семплов аудиоданных; 5) CRC из лога EAC для проверенного аудиофайла. Выводится в случае, если в папке с проверяемым аудиофайлом находится файл лога EAC. 6) Время, затраченное на вычисления. Для вычислений CRC всех аудиофайлов рипа с разделением результатов по трекам следует воспользоваться командой Проверить по базе AccurateRip. Данная команда доступна в проводнике для файлов отчётов EAC, в том числе и встроенных в аудиофайлы. Для вычислений также потребуются cue файл и указанные в нём аудиофайлы.
Результат проверки выводится в новом окне, а также может быть сохранён в виде файла отчёта:
Отчёт содержит основную информацию о проверке: 1) Номер версии и сборки CUE Corrector, создавшего отчет. 2) Имя исполнителя и название альбома. Информация берется из отчёта EAC. 3) Информация о запросе в базу AcurateRip: идентификационный номер диска и название файла с информацией о нём в базе, а также его наличии в ней. 4) Информация о диске в базе AccurateRip версий 1 и 2. 5) Информация о наличии в базе AccurateRip v1 других штамповок диска. Выводится если указано в настройках Проверять другие смещения (AR v 1). 6) Информация о проверенных аудиоданных, сверка контрольных сумм с отчётом EAC. 7) CRC, рассчитанные по алгоритму AccurateRip для баз версий 1 и 2. Выводится если указано в настройках Добавлять AccurateRip CRC в отчёт. 8) Длительность проверки и дата создания отчёта. 9) Контрольная сумма отчёта. CRC аудиоданных показаны в 6 блоке отчёта в виде таблицы: Track – номер трека; Peak - Peak Level, т.е. максимальная громкость трека; CRC32 - контрольная сумма с учётом нулевых семплов; W/O NULL - контрольная сумма без учёта нулевых семплов; LOG - контрольные суммы из отчёта EAC. В случае их совпадения с CRC проверяемых аудиофайлов выводится способ расчёта (с учетом или без нулевых семплов). Первая строка в таблице относится ко всему диску, последующие – к отдельным трекам. В зависимости от типа рипа таблица будет иметь следующий вид: Для рипа образом (Image+CUE)
В столбце LOG информация только о CRC всего диска. Для потрекового рипа (Tracks+CUE)
В столбце LOG отсутствует информация о CRC всего диска, но есть сведения для каждого трека. При этом можно заметить, что для трека 3 CRC аудиофайла не совпадает с CRC, указанным в отчёте EAC, а для трека 5 вообще отсутствует, что может означать или отсутствие CRC в отчёте EAC или расхождения в нём test© CRC. Так как основное назначение данной функции проверка по базе AccurateRip, вычисления CRC по умолчанию производятся только в случае, если информация о диске (рипе) есть в базе AccurateRip. При отсутствии диска в базе или невозможностью с ней связаться отчёт имеет упрощенный вид:
Для вывода полного отчёта в настройках необходимо отметить пункт Вычислять CRC даже если диска нет в базе
|
|
FoxSD
Стаж: 16 лет 7 месяцев Сообщений: 7543
|
FoxSD ·
17-Апр-15 16:17
(спустя 1 месяц 25 дней, ред. 06-Янв-17 19:53)
Практическое применениеВозмем рип образом и вычислим CRC с помощью команды Проверить по базе AccurateRip:
Обратим особое внимание на трек № 5.
Теперь разрежим образ на треки и подсчитаем CRC для отдельного файла (5 трека) с помощью команды Вычислить EAC CRC:
как ни странно, но в обоих случаях CRC совпадают, что говорит о том, что разрезали образ правильно. Но будут ли они звучать одинаково? Не спешите с ответом CUE Corrector - редактирование CUE, проверка качества lossless, работа с базой accurateRip и многое другое.
|
|
KorDen32
Стаж: 15 лет 3 месяца Сообщений: 2863
|
KorDen32 ·
01-Янв-22 12:26
(спустя 6 лет 8 месяцев, ред. 05-Фев-22 16:09)
Проверка CRC по логу EAC под LinuxРаботает как для образов, так и для потрековых рипов при "Null samples used in CRC calculations: Yes"
Выдаем нужный поток посредством sox или ffmpeg, считаем посредством rhash:
sox file.flac -t raw - | rhash --printf='%C\n' -C -
или
ffmpeg -nostats -loglevel 0 -i file.flac -acodec pcm_s16le -f s16le pipe:1 | rhash --printf='%C\n' -C -
Посчитаем массово CRC:
Код:
for file in *.flac
do
crc=$(sox "$file" -t raw - | rhash --printf='%C\n' -C -)
echo "${crc^^} $file"
done
Пример вывода:
Код:
41101723 01 - Daftendirekt.flac
6CCAD2B7 02 - Wdpk 83.7 fm.flac
31B2001D 03 - Revolution 909.flac
782CE73F 04 - Da Funk.flac
8E10100C 05 - Phoenix.flac
5D51776B 06 - Fresh.flac
B55A1585 07 - Around The World.flac
1F7F7E1A 08 - Rollin' & Scratchin'.flac
C508511C 09 - Teachers.flac
E19D87D2 10 - High Fidelity.flac
13346326 11 - Rock'n Roll.flac
4EBB97CF 12 - Oh Yeah.flac
74014ACC 13 - Burnin'.flac
4BBA85F2 14 - Indo Silver Club.flac
B6194633 15 - Alive.flac
E5CACBA3 16 - Funk Ad.flac
Прочитаем в таком же виде лог EAC (предполагается что лог EAC на английском):
Код:
cat *.log | grep -E "Filename|Copy CRC" | sed -E 'N;s/.+Filename.+\\(.+)\r\n.+Copy CRC (.+)\r/\2 \1/'
Если лог в UTF-16, то
Код:
iconv -f utf-16 -t utf-8 *.log | grep -E "Filename|Copy CRC" | sed -E 'N;s/.+Filename.+\\(.+)\r\n.+Copy CRC (.+)\r/\2 \1/'
|
|
заинька457
Стаж: 3 года 5 месяцев Сообщений: 131
|
заинька457 ·
18-Янв-22 09:56
(спустя 16 дней, ред. 18-Янв-22 09:56)
KorDen32 писал(а):
82531677В Ubuntu есть готовый скрипт /usr/bin/crc32, но принимает он только файл, поэтому:
crc32 <(sox "file.flac" -t raw -)
Есть ещё rhash.
Код:
$ sox 01.flac -t raw - | rhash --printf='%C\n' -C -
332514A4
И можно использовать flac вместо sox но будет больше букв, просто только из-за CRC32 не всегда рационально устанавливать sox.
Код:
$ flac -d 01.flac --silent --force-raw-format --endian=little --sign=signed -c | rhash --printf='%C\n' -C -
332514A4
|
|
KorDen32
Стаж: 15 лет 3 месяца Сообщений: 2863
|
KorDen32 ·
18-Янв-22 10:48
(спустя 52 мин.)
заинька457 писал(а):
82615808Есть ещё rhash
Спасибо за наводку, так более универсально, перепишу чуть позже.
заинька457 писал(а):
82615808И можно использовать flac вместо sox но будет больше букв, просто только из-за CRC32 не всегда рационально устанавливать sox.
Рипы бывают не только во flac, но и в wv/ape, да и просто .wav может быть на диске по какой-то причине. Я брал более-менее универсальный плеер. Хотя, sox не поддерживает ape...
|
|
заинька457
Стаж: 3 года 5 месяцев Сообщений: 131
|
заинька457 ·
18-Янв-22 11:42
(спустя 53 мин., ред. 18-Янв-22 11:42)
KorDen32 писал(а):
82616026Рипы бывают не только во flac, но и в wv/ape, да и просто .wav может быть на диске по какой-то причине. Я брал более-менее универсальный плеер. Хотя, sox не поддерживает ape...
Тогда ffmpeg.., у него есть декодеры на все случаи жизни.
Код:
$ ffmpeg -nostats -loglevel 0 -i 01.flac -acodec pcm_s16le -f s16le pipe:1 | rhash --printf='%C\n' -C -
332514A4
Здесь следует обратить внимание, что для CDDA PCM-ка будет именно s16le.., в ином случае нужно будет уточнить формат.
|
|
KorDen32
Стаж: 15 лет 3 месяца Сообщений: 2863
|
KorDen32 ·
18-Янв-22 18:59
(спустя 7 часов)
заинька457 писал(а):
82616214Тогда ffmpeg.., у него есть декодеры на все случаи жизни.
ffmpeg изначально не рассматривал, потому что на голой оси он требует что-то уровня "...156 newly installed ... 91.1 MB of archives... 689 MB of additional disk space...", с sox не сравнить
Но видимо для ape малой кровью не обойтись.
|
|
заинька457
Стаж: 3 года 5 месяцев Сообщений: 131
|
заинька457 ·
19-Янв-22 08:27
(спустя 13 часов, ред. 19-Янв-22 08:27)
По моим данным, распакованный ffmpeg на диске занимает чуть больше 2MiB... И с ним вы можете позволить себе по истине всё, что угодно - must have.
установка ffmpeg из deb-multimedia на Debian sid
Код:
$ sudo apt install ffmpeg
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Предлагаемые пакеты:
nvidia-libvdpau1 ffmpeg-doc
Следующие НОВЫЕ пакеты будут установлены:
ffmpeg
Обновлено 0 пакетов, установлено 1 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 1 722 kB архивов.
После данной операции объём занятого дискового пространства возрастёт на 2 293 kB.
Пол:1 https://www.deb-multimedia.org sid/main amd64 ffmpeg amd64 10:4.4.1-dmo4 [1 722 kB]
Получено 1 722 kB за 1с (1 473 kB/s)
Выбор ранее не выбранного пакета ffmpeg.
(Чтение базы данных … на данный момент установлен 202301 файл и каталог.)
Подготовка к распаковке …/ffmpeg_10%3a4.4.1-dmo4_amd64.deb …
Распаковывается ffmpeg (10:4.4.1-dmo4) …
Настраивается пакет ffmpeg (10:4.4.1-dmo4) …
Обрабатываются триггеры для man-db (2.9.4-4) …
|
|
KorDen32
Стаж: 15 лет 3 месяца Сообщений: 2863
|
KorDen32 ·
05-Фев-22 16:01
(спустя 17 дней)
заинька457
Это если у вас уже напичканый всем чем только можно десктопный дистрибутив. А на minimal/server без иксов это выглядит как-то так:
скрытый текст
Код:
$ sudo apt install ffmpeg
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
fontconfig i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libasyncns0 libavc1394-0 libavcodec58
libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0 libcaca0
libcairo-gobject2 libcairo2 libcdio-cdda2 libcdio-paranoia2 libcdio19 libchromaprint1 libcodec2-0.9 libdatrie1
libdav1d4 libdc1394-25 libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2
libfftw3-double3 libflite1 libfribidi0 libgbm1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common
libgfortran5 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgme0 libgraphite2-3
libharfbuzz0b libiec61883-0 libigdgmm11 libjack-jackd2-0 liblapack3 liblilv-0-0 libllvm11 libmfx1 libmp3lame0
libmpg123-0 libmysofa1 libnorm1 libnuma1 libopenal-data libopenal1 libopenmpt0 libpango-1.0-0 libpangocairo-1.0-0
libpangoft2-1.0-0 libpciaccess0 libpgm-5.3-0 libpixman-1-0 libpocketsphinx3 libpostproc55 libpulse0 libquadmath0
librabbitmq4 libraw1394-11 librsvg2-2 librsvg2-common librubberband2 libsamplerate0 libsdl2-2.0-0 libsensors-config
libsensors5 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0 libsodium23 libsord-0-0 libsoxr0 libspeex1 libsphinxbase3
libsratom-0-0 libsrt1.4-gnutls libssh-gcrypt-4 libswresample3 libswscale5 libthai-data libthai0 libtheora0
libtwolame0 libudfread0 libusb-1.0-0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvidstab1.1 libvpx6
libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libwebpmux3 libwrap0 libx11-xcb1
libx264-160 libx265-192 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0
libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1
libxkbcommon0 libxrandr2 libxrender1 libxshmfence1 libxss1 libxv1 libxvidcore4 libxxf86vm1 libz3-4 libzmq5
libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers ocl-icd-libopencl1 pocketsphinx-en-us
va-driver-all vdpau-driver-all x11-common xkb-data
Suggested packages:
ffmpeg-doc i965-va-driver-shaders libbluray-bdj libfftw3-bin libfftw3-dev jackd2 libportaudio2 pciutils pulseaudio
libraw1394-doc librsvg2-bin xdg-utils lm-sensors serdi sndiod sordi speex opencl-icd nvidia-vdpau-driver
nvidia-tesla-440-vdpau-driver nvidia-tesla-418-vdpau-driver nvidia-legacy-390xx-vdpau-driver
nvidia-legacy-340xx-vdpau-driver
The following NEW packages will be installed:
ffmpeg fontconfig i965-va-driver intel-media-va-driver libaacs0 libaom0 libass9 libasyncns0 libavc1394-0
libavcodec58 libavdevice58 libavfilter7 libavformat58 libavresample4 libavutil56 libbdplus0 libbluray2 libbs2b0
libcaca0 libcairo-gobject2 libcairo2 libcdio-cdda2 libcdio-paranoia2 libcdio19 libchromaprint1 libcodec2-0.9
libdatrie1 libdav1d4 libdc1394-25 libdrm-amdgpu1 libdrm-common libdrm-intel1 libdrm-nouveau2 libdrm-radeon1 libdrm2
libfftw3-double3 libflite1 libfribidi0 libgbm1 libgdk-pixbuf-2.0-0 libgdk-pixbuf2.0-bin libgdk-pixbuf2.0-common
libgfortran5 libgl1 libgl1-mesa-dri libglapi-mesa libglvnd0 libglx-mesa0 libglx0 libgme0 libgraphite2-3
libharfbuzz0b libiec61883-0 libigdgmm11 libjack-jackd2-0 liblapack3 liblilv-0-0 libllvm11 libmfx1 libmp3lame0
libmpg123-0 libmysofa1 libnorm1 libnuma1 libopenal-data libopenal1 libopenmpt0 libpango-1.0-0 libpangocairo-1.0-0
libpangoft2-1.0-0 libpciaccess0 libpgm-5.3-0 libpixman-1-0 libpocketsphinx3 libpostproc55 libpulse0 libquadmath0
librabbitmq4 libraw1394-11 librsvg2-2 librsvg2-common librubberband2 libsamplerate0 libsdl2-2.0-0 libsensors-config
libsensors5 libserd-0-0 libshine3 libsnappy1v5 libsndio7.0 libsodium23 libsord-0-0 libsoxr0 libspeex1 libsphinxbase3
libsratom-0-0 libsrt1.4-gnutls libssh-gcrypt-4 libswresample3 libswscale5 libthai-data libthai0 libtheora0
libtwolame0 libudfread0 libusb-1.0-0 libva-drm2 libva-x11-2 libva2 libvdpau-va-gl1 libvdpau1 libvidstab1.1 libvpx6
libvulkan1 libwayland-client0 libwayland-cursor0 libwayland-egl1 libwayland-server0 libwebpmux3 libwrap0 libx11-xcb1
libx264-160 libx265-192 libxcb-dri2-0 libxcb-dri3-0 libxcb-glx0 libxcb-present0 libxcb-randr0 libxcb-render0
libxcb-shape0 libxcb-shm0 libxcb-sync1 libxcb-xfixes0 libxcursor1 libxdamage1 libxfixes3 libxi6 libxinerama1
libxkbcommon0 libxrandr2 libxrender1 libxshmfence1 libxss1 libxv1 libxvidcore4 libxxf86vm1 libz3-4 libzmq5
libzvbi-common libzvbi0 mesa-va-drivers mesa-vdpau-drivers mesa-vulkan-drivers ocl-icd-libopencl1 pocketsphinx-en-us
va-driver-all vdpau-driver-all x11-common xkb-data
0 upgraded, 159 newly installed, 0 to remove and 0 not upgraded.
Need to get 132 MB of archives.
After this operation, 423 MB of additional disk space will be used.
|
|
заинька457
Стаж: 3 года 5 месяцев Сообщений: 131
|
заинька457 ·
05-Фев-22 19:10
(спустя 3 часа)
KorDen32
OK. Вы правы, (:D) в моём выхлопе только ffmpeg без зависимостей, а в зависимостях у него тяжелые либы, всё-таки это аудио-видео фреймворк. Декодер Monkey's Audio есть ещё в mplayer и mpv, но они по моим сведениям не умеют отдавать поток в stdout, только в файл - PCM WAV - ничто не мешает посчитать hash на полученном файле.
|
|
|