Нарезка образов Medieval CUE Splitter'ом: где «порылась собака»?

Дата обновления: 30 Ноября 2014
2014-11-30T17:41
Audiophile's Software

Этот пост создан по просьбе Mr. Merak'а, напомнившую мне довольно старую, но всё же актуальную тему.

Давно известно, что для нарезки образов Audio CD, особенно lossless, использовать Medieval CUE Splitter не рекомендуется. Об этом говорят тесты, показывающие, что утилита не сохраняет оригинальную продолжительность треков (как правило увеличивая её). Однако до сих пор не хватало детального исследования: что же действительно теряется при нарезке? Именно в этом я и решил разобраться.

Во-первых, если проявить сообразительность, а также вспомнить, что Medieval CUE Splitter режет без перекодировки, становится понятно, что режет он исключительно по фреймам. То есть, если, например, файл имеет 44100 семплов (1 секунда Audio CD), то при сжатии во FLAC с восьмым уровнем (блоками по 4096 семплов) кодер разобьет его на 11 независимых фреймов. Каждый такой фрейм самодостаточен и его декодирование не зависит от наличия предыдущих или последующих данных, однако сам по себе фрейм неделим. Таким образом MCS может разрезать файлы исключительно по границам фреймов, а в файле образа они, как правило, с началом и концом треков не совпадают, и потому результирующий файл обычно содержит не только нужный трек, но еще и фрагмент последующего трека (что подтверждается анализом в звуковом редакторе).

Это объясняет тот факт, что нарезанные MCS файлы продолжают играть без зазоров (т. к. проигрываются те же фреймы, в той же последовательности), однако не объясняет, почему суммарная продолжительность альбома после нарезки уменьшается.

Для проверки я скачал альбом Pink Floyd — The Endless River (2014), затем нарезал его в MCS со стандартными параметрами и полученные файлы склеил обратно в один. В результате продолжительность оригинального образа FLAC: 53:02.467 (140 346 780 samples), а полученного после нарезки — 53:01.192 (140 290 560 samples). Как видите, мы потеряли более одной секунды.

Загрузив файлы в звуковой редактор и выполнив вычитание, я обнаружил, что примерно до 12:39 данные совпадают (полная тишина), а затем появляется микс двух треков с задержкой в одну секунду (то ест фактически один трек начинает отставать от другого).

Чтобы понять, почему так происходит, достаточно заглянуть в индексную карту (CUE) — оригинальную и результирующую. В оригинальном CUE мы видим наличие предзазора перед четвертным треком:

REM GENRE Progressive Rock
REM DATE 2014
REM DISCID 0B0C6E12
REM COMMENT ExactAudioCopy v1.0b3
PERFORMER "Pink Floyd"
TITLE "The Endless River"
REM REPLAYGAIN_ALBUM_GAIN -1.92 dB
REM REPLAYGAIN_ALBUM_PEAK 0.999969
FILE "Pink Floyd - The Endless River.flac" WAVE
TRACK 01 AUDIO
TITLE "Things Left Unsaid"
REM REPLAYGAIN_TRACK_GAIN -0.81 dB
REM REPLAYGAIN_TRACK_PEAK 0.743317
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "It's What We Do"
REM REPLAYGAIN_TRACK_GAIN -1.79 dB
REM REPLAYGAIN_TRACK_PEAK 0.985474
INDEX 01 04:26:55
TRACK 03 AUDIO
TITLE "Ebb and Flow"
REM REPLAYGAIN_TRACK_GAIN +2.07 dB
REM REPLAYGAIN_TRACK_PEAK 0.614746
INDEX 01 10:44:03
TRACK 04 AUDIO
TITLE "Sum"
REM REPLAYGAIN_TRACK_GAIN -2.96 dB
REM REPLAYGAIN_TRACK_PEAK 0.946045
INDEX 00 12:38:45
INDEX 01 12:39:38

TRACK 05 AUDIO
TITLE "Skins"
REM REPLAYGAIN_TRACK_GAIN -1.81 dB
REM REPLAYGAIN_TRACK_PEAK 0.935089
INDEX 01 17:27:65
TRACK 06 AUDIO
TITLE "Unsung"
REM REPLAYGAIN_TRACK_GAIN +1.38 dB
REM REPLAYGAIN_TRACK_PEAK 0.750397
INDEX 01 20:04:66
TRACK 07 AUDIO
TITLE "Anisina"
REM REPLAYGAIN_TRACK_GAIN -4.19 dB
REM REPLAYGAIN_TRACK_PEAK 0.999969
INDEX 01 21:12:00
TRACK 08 AUDIO
TITLE "The Lost Art of Conversation"
REM REPLAYGAIN_TRACK_GAIN +5.15 dB
REM REPLAYGAIN_TRACK_PEAK 0.498901
INDEX 01 24:28:60
TRACK 09 AUDIO
TITLE "On Noodle Street"
REM REPLAYGAIN_TRACK_GAIN +2.03 dB
REM REPLAYGAIN_TRACK_PEAK 0.687927
INDEX 01 26:11:56
TRACK 10 AUDIO
TITLE "Night Light"
REM REPLAYGAIN_TRACK_GAIN +2.43 dB
REM REPLAYGAIN_TRACK_PEAK 0.624390
INDEX 01 27:53:57
TRACK 11 AUDIO
TITLE "Allons-Y (part 1)"
REM REPLAYGAIN_TRACK_GAIN -3.27 dB
REM REPLAYGAIN_TRACK_PEAK 0.882721
INDEX 01 29:35:72
TRACK 12 AUDIO
TITLE "Autumn '68"
REM REPLAYGAIN_TRACK_GAIN -1.92 dB
REM REPLAYGAIN_TRACK_PEAK 0.767029
INDEX 01 31:33:18
TRACK 13 AUDIO
TITLE "Allons-Y (part 2)"
REM REPLAYGAIN_TRACK_GAIN -3.33 dB
REM REPLAYGAIN_TRACK_PEAK 0.915680
INDEX 01 33:08:29
TRACK 14 AUDIO
TITLE "Talkin' Hawkin'"
REM REPLAYGAIN_TRACK_GAIN -3.78 dB
REM REPLAYGAIN_TRACK_PEAK 0.951447
INDEX 01 34:40:60
TRACK 15 AUDIO
TITLE "Calling"
REM REPLAYGAIN_TRACK_GAIN +1.97 dB
REM REPLAYGAIN_TRACK_PEAK 0.787018
INDEX 00 38:09:64
INDEX 01 38:10:19
TRACK 16 AUDIO
TITLE "Eyes to Pearls"
REM REPLAYGAIN_TRACK_GAIN -0.43 dB
REM REPLAYGAIN_TRACK_PEAK 0.744415
INDEX 01 41:48:14
TRACK 17 AUDIO
TITLE "Surfacing"
REM REPLAYGAIN_TRACK_GAIN -1.82 dB
REM REPLAYGAIN_TRACK_PEAK 0.935822
INDEX 01 43:39:27
TRACK 18 AUDIO
TITLE "Louder Than Words"
REM REPLAYGAIN_TRACK_GAIN -3.05 dB
REM REPLAYGAIN_TRACK_PEAK 0.974426
INDEX 01 46:25:46

А в результирующем — PREGAP соответствующей длины:

REM GENRE Progressive Rock
REM DATE 2014
REM DISCID 0B0C6E12
REM COMMENT ExactAudioCopy v1.0b3
REM REPLAYGAIN_ALBUM_GAIN -1.92 dB
REM REPLAYGAIN_ALBUM_PEAK 0.999969
TITLE "The Endless River"
PERFORMER "Pink Floyd"
FILE "(01) [Pink Floyd] Things Left Unsaid.flac" WAVE
TRACK 01 AUDIO
REM REPLAYGAIN_TRACK_GAIN -0.81 dB
REM REPLAYGAIN_TRACK_PEAK 0.743317
TITLE "Things Left Unsaid"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(02) [Pink Floyd] It's What We Do.flac" WAVE
TRACK 02 AUDIO
REM REPLAYGAIN_TRACK_GAIN -1.79 dB
REM REPLAYGAIN_TRACK_PEAK 0.985474
TITLE "It's What We Do"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(03) [Pink Floyd] Ebb and Flow.flac" WAVE
TRACK 03 AUDIO
REM REPLAYGAIN_TRACK_GAIN +2.07 dB
REM REPLAYGAIN_TRACK_PEAK 0.614746
TITLE "Ebb and Flow"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(04) [Pink Floyd] Sum.flac" WAVE
TRACK 04 AUDIO
REM REPLAYGAIN_TRACK_GAIN -2.96 dB
REM REPLAYGAIN_TRACK_PEAK 0.946045
TITLE Sum
PERFORMER "Pink Floyd"
PREGAP 00:00:68
INDEX 01 00:00:00
FILE "(05) [Pink Floyd] Skins.flac" WAVE
TRACK 05 AUDIO
REM REPLAYGAIN_TRACK_GAIN -1.81 dB
REM REPLAYGAIN_TRACK_PEAK 0.935089
TITLE Skins
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(06) [Pink Floyd] Unsung.flac" WAVE
TRACK 06 AUDIO
REM REPLAYGAIN_TRACK_GAIN +1.38 dB
REM REPLAYGAIN_TRACK_PEAK 0.750397
TITLE Unsung
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(07) [Pink Floyd] Anisina.flac" WAVE
TRACK 07 AUDIO
REM REPLAYGAIN_TRACK_GAIN -4.19 dB
REM REPLAYGAIN_TRACK_PEAK 0.999969
TITLE Anisina
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(08) [Pink Floyd] The Lost Art of Conversation.flac" WAVE
TRACK 08 AUDIO
REM REPLAYGAIN_TRACK_GAIN +5.15 dB
REM REPLAYGAIN_TRACK_PEAK 0.498901
TITLE "The Lost Art of Conversation"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(09) [Pink Floyd] On Noodle Street.flac" WAVE
TRACK 09 AUDIO
REM REPLAYGAIN_TRACK_GAIN +2.03 dB
REM REPLAYGAIN_TRACK_PEAK 0.687927
TITLE "On Noodle Street"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(10) [Pink Floyd] Night Light.flac" WAVE
TRACK 10 AUDIO
REM REPLAYGAIN_TRACK_GAIN +2.43 dB
REM REPLAYGAIN_TRACK_PEAK 0.624390
TITLE "Night Light"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(11) [Pink Floyd] Allons-Y (part 1).flac" WAVE
TRACK 11 AUDIO
REM REPLAYGAIN_TRACK_GAIN -3.27 dB
REM REPLAYGAIN_TRACK_PEAK 0.882721
TITLE "Allons-Y (part 1)"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(12) [Pink Floyd] Autumn '68.flac" WAVE
TRACK 12 AUDIO
REM REPLAYGAIN_TRACK_GAIN -1.92 dB
REM REPLAYGAIN_TRACK_PEAK 0.767029
TITLE "Autumn '68"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(13) [Pink Floyd] Allons-Y (part 2).flac" WAVE
TRACK 13 AUDIO
REM REPLAYGAIN_TRACK_GAIN -3.33 dB
REM REPLAYGAIN_TRACK_PEAK 0.915680
TITLE "Allons-Y (part 2)"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(14) [Pink Floyd] Talkin' Hawkin'.flac" WAVE
TRACK 14 AUDIO
REM REPLAYGAIN_TRACK_GAIN -3.78 dB
REM REPLAYGAIN_TRACK_PEAK 0.951447
TITLE "Talkin' Hawkin'"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(15) [Pink Floyd] Calling.flac" WAVE
TRACK 15 AUDIO
REM REPLAYGAIN_TRACK_GAIN +1.97 dB
REM REPLAYGAIN_TRACK_PEAK 0.787018
TITLE Calling
PERFORMER "Pink Floyd"
PREGAP 00:00:30
INDEX 01 00:00:00
FILE "(16) [Pink Floyd] Eyes to Pearls.flac" WAVE
TRACK 16 AUDIO
REM REPLAYGAIN_TRACK_GAIN -0.43 dB
REM REPLAYGAIN_TRACK_PEAK 0.744415
TITLE "Eyes to Pearls"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(17) [Pink Floyd] Surfacing.flac" WAVE
TRACK 17 AUDIO
REM REPLAYGAIN_TRACK_GAIN -1.82 dB
REM REPLAYGAIN_TRACK_PEAK 0.935822
TITLE Surfacing
PERFORMER "Pink Floyd"
INDEX 01 00:00:00
FILE "(18) [Pink Floyd] Louder Than Words.flac" WAVE
TRACK 18 AUDIO
REM REPLAYGAIN_TRACK_GAIN -3.05 dB
REM REPLAYGAIN_TRACK_PEAK 0.974426
TITLE "Louder Than Words"
PERFORMER "Pink Floyd"
INDEX 01 00:00:00

Таким образом, становится ясно, что MCS фактически удаляет данные, содержащиеся в зазорах, а при воспроизведении их должна замещать тишина, создаваемая тегом PREGAP, то есть в данном случае используется формат CUE с удалёнными зазорами (Gaps Left Out). Тем, кто не знаком с синтаксисом CUE, советую почитать статью о CUE или RuTracker.

Формат c удалёнными зазорами в отличие от Gaps Appended совместим со спецификацией Cue Sheet, и потому поддерживается foobar2000. Единственное что — надо изменить кодировку CUE на UTF-8 и удалить текст, вставленный программой в начале файла, иначе плеер откажется его читать.

В альбоме есть еще один зазор длиной 30 фреймов (чуть менее половины секунды), и в сумме мы получаем те самые недостающие в результирующем файле семплы, с той лишь поправкой, что зазоры удаляются с точностью до фрейма.

Однако, всё меняется если перед нарезкой установить в Medieval CUE Splitter галочку Добавить зазоры. В этом случае программа создаёт набор файлов + CUE в формате Gaps Prepended, то есть зазор не удаляется, а присоединяется к последующему треку. Это единственный формат потрекового CUE с зазорами, указанный в спецификации — формат с зазорами, присоединенными к предыдущему треку, является нестандартным. Кстати, интересно, что при таком формате, если открывать трек в foobar2000 через CUE, плеер зазоры не воспроизводит.

Теперь, когда зазоры не были удалены, суммарная продолжительность файлов на выходе максимально приблизилась к продолжительности исходного образа, однако всё равно осталась нехватка в 924 семпла. Далее я постарался выяснить, откуда она взялась.

Анализ показал, что порядок всех семплов в точности соответствует исходному, то есть 924 семпла потеряны в конце образа. Я проверил несколько дисков, и везде в режиме добавления зазоров, а также в режиме без зазоров (когда они изначально и так отсутствовали), в конце образа терялось около 1000 семплов. Похоже, будто программа просто отбрасывает последний фрейм.

Однако, эти результаты не совпали с результатами для других форматов - APE, WV. Здесь в режиме с добавлением зазоров данные оказались в сохранности.

Таким образом, можно сделать заключение, что Medieval CUE Splitter не годится для точной нарезки lossless образов в формате FLAC, так как в любом случае теряет информацию в конце последнего трека. Для других lossless форматов эта пробелма отсутствует, однако стоит учесть, что при снятой отметке добавления зазоров они будут удаляться.

Как бы там ни было, для правильной нарезки образов в любых форматах, включая FLAC, рекомендуется использовать исключительно CUETools.


Информация от спонсора

Оконщик: профессиональная установка окон и балконов. На сайте фирмы Вы можете заказать окна ПВХ в серии дома п-44т с установкой под ключ. На все изделия и работы распространяется гарантия. Действует система скидок для комплексных заказов.

 
   
Добавил: Audiophile | Просмотров: 26984 | Рейтинг: 5.0/5, голосов: 4
Комментариев: 9
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
0   Спам
[9] MaximusPanin (06 Ноября 2016 01:39)
MaximusPanin
Умники :) Подскажите как порезать изначально рипнутый одним файлом flac так, что бы потом можно было выложить на трекере и лог сошелся ? А то выдает надпись "No tracks found, did you rip this as a range?  [FAIL]"
0   Спам
[8] vake (02 Апреля 2015 16:36)
vake
поправьте ссылку на рутрекер) а то не все догадаются)
+2   Спам
[7] DjMyas (13 Февраля 2015 23:21)
Я бы вообще запретил эту программу. Многие ей пользуются и не знают что она творит. Сам вначале очень удивился, когда после нарезки у меня в конце песни осталась часть следующей. Сразу выкинул эту программу после этого.
0   Спам
[2] Dave_Scream (05 Декабря 2014 18:07)
я использую CueToApl, он оставляет нетронутым файл-образ, но генерит потреково APLки, ссылающиеся на файл-образ. В которые можно спокойно записывать теги foo_discogs.
Взять можно здесь http://www.hydrogenaud.io/forums/index.php?showtopic=56906&hl
ссылка на гидрогенаудио не работает, качать тут http://rghost.ru/59438284

Кстати, интересно будет ли на моём андроиде GoneMAD Music Player проигрывать такие APL
0   Спам
[1] plov333 (04 Декабря 2014 14:20)
plov333
Спасибо огромное за ещё одну деликатную статью.  worship А то часто замечал, что именно эту программу рекомендуют на форуме рутрекера для нарезки образов. Теперь ясно почему  :D
0   Спам
[3] User (06 Декабря 2014 08:07)
User
Если делать нарезку по трекам, то там, по сути, зазоры, длящиеся секунду, никому не нужны, также как и сам CUE. Так что пойдёт для нарезки образа по трекам.
0   Спам
[4] plov333 (06 Декабря 2014 15:40)
plov333
Не согласен. Не во всех образах есть зазоры. А если будет необходимость востановить первозданный образ из треков (например, для записи на диск), то без cue и зазоров в точности это нельзя будет сделать. Всё таки CueTools подходит для этой цели лучше.
0   Спам
[5] User (07 Декабря 2014 11:36)
User
Признаю, ошибся. Резать с шагом в 4096 семплов... MCS здесь не годится. Голова думала про другое. Зачем мне хранить эти зазоры, когда я могу из точной по-трековой копии сделать "неточный" CD Audio диск и без CUE? Рипать повторно все равно не собираюсь - итак имеется по-трековая копия на HDD. В итоге какая принципиальная разница того, что выделю ли я для зазоров 5, 10, 50 фреймов или 2 секунды согласно стандарту CD Audio? Это больше похоже на то, как придираться к тому, в каких секторах находится файл в жестком диске при копировании его на другой жесткий диск. Какая разница, что он будет располагаться в том или в ином секторе?
0   Спам
[6] plov333 (07 Декабря 2014 14:48)
plov333
Риторический вопрос) Принципиальной разницы может и нет. Но если дело касается чего то по серьёзнее (например, выкладывания на рутрекере), то такие вещи не проканают. Поскольку тут дело касается точности, то Medieval тихо курит в сторонке... С CueTools  не прогадаешь. А вообще, резать образы можно и в фубаре, если для себя или образ с винила, например. Тоже cue не будет как и зазоров. Так что, MCS можно смело вбрасывать)