Полмегабайта пустоты в каждом файле Apple Music

Автор оригинала: Daniel Aleksandersen
  • Перевод

Вы когда-нибудь докупали расширенный объём хранилища для iPod, iPhone или Mac, чтобы иметь больше места для своей цифровой коллекции музыки Apple Music (iTunes)? Возможно, вы заполняли его гигабайтами пустого пространства.

Музыкальные файлы, которые вы покупаете в Apple Music Store (AMS; ранее назывался iTunes Music Store) содержат приблизительно 6% цифрового аналога пустоты. Я говорю не о тишине, а о сплошных блоках пустого пространства, находящихся внутри файлов. Они нужны только для того, чтобы заполнять файлы, делая их на 0,5 МБ больше. Так зачем же Apple делает музыкальные файлы излишне большими? И как вернуть впустую занимаемое пространство?

Эта статья будет довольно технической, и рассматриваемые в ней темы требуют небольшого объяснения. Можете пропустить первые 14 абзацев, если вас интересует только «почему», или пропустить первые 17 абзацев, если вам интересно, как вернуть это пространство.

Приобретаемые в AMS музыкальные файлы кодируются Advanced Audio Codec (AAC) с помощью Apple AAC Encoder. Файлы передаются в контейнере ISOBMFF (ISO 14496-1). Этот формат контейнера используется для различных медиафайлов, в том числе для звука, изображений и фильмов. Формат контейнера имеет много возможностей для реализации, что позволяет создавать разные странные особенности.

Контейнеры ISOM разделены на различные блоки данных: сам мультимедийный поток, метаданные (подробности кодирования, имя исполнителя, обложка альбома, информация о нормализации громкости и т. п.) и пустое пространство. Есть и другие блоки, но в этой статье нас интересуют только эти три.

Эти разделы могут быть выстроены в файле в любом порядке. Однако в некоторых ситуациях определённый порядок может вызывать различные побочные эффекты. Например, если поместить блок метаданных в конец файла, то прежде чем воспроизвести композицию, необходимо будет скачать её (или считать с локального накопителя) целиком. Чтобы избежать этого, кодировщики обычно размещают его перед более объёмным блоком мультимедийного потока. Блок метаданных обращается к абсолютным позициям внутри блока мультимедийного потока, измеряемым как смещение от начала файла. В метаданные нельзя вносить изменения (например, изменять написание имени исполнителя) без повторной сборки всего файла для пересчёта смещений.

Чтобы обойти эту проблему, кодировщики обычно оставляют пустое пространство между блоками метаданных и мультимедийного потока. В контейнере ISOM этот блок называется «свободным» (free) блоком. Эти блоки содержат только нулевые байты. Если вы измените, например, название альбома, то Apple Music сможет расширить блок метаданных и уменьшить свободный блок без необходимости перемещать блок мультимедийного потока. Это довольно удобно.

Если рипнуть CD при помощи Apple Music, воспользовавшись Apple AAC Encoder (опция по умолчанию), он зарезервирует для этой цели приблизительно по 5 КБ свободного пространства в каждом файле. Этого достаточно, чтобы добавить примерно 1250 эмодзи в метаданные каждой из композиций. Такого объёма должно вполне хватить на любые изменения, которые были бы необходимы в метаданных. Если же вам всё-таки нужно будет добавить больше данных, то позже музыкальный файл можно будет пересобрать заново, чтобы расширить пространство метаданных. Эта операция займёт чуть больше времени, но это будет приемлемым компромиссом, чтобы не тратить слишком много места на накопителе.

Однако покупаемые в Apple Music Store музыкальные файлы содержат приблизительно 500  КБ (0,5 МБ) свободного места. Это в 100 раз больше, чем место, выделяемое Apple Music в композициях, которые вы рипнули самостоятельно. А ещё это гораздо больший объём под метаданные, чем вам когда-либо понадобится.

В моей библиотеке Apple Music есть 2500 композиций, купленных мной в AMS, и почти такое же количество рипнутых файлов. Они закодированы с одинаковыми настройками качества. Проанализировав свою коллекцию, я выяснил, что купленные в AMS композиции в среднем на 7% больше рипнутых. 6% этой разницы составляет пустое пространство (суммарно 1,25ГБ). В рипах пустое пространство занимает лишь 0,005% от места в хранилище.

Я проанализировал выборку музыкальных файлов iTunes Store, купленных в 2010 и 2020 годах, все они имеют одинаковую структуру с одинаковым количеством лишнего пустого пространства. Скорость канала и ёмкость хранилища десять лет назад были дороже, поэтому тогда проблема была ещё более серьёзной.

Классическая файловая система Apple HFS+ не поддерживала разреженное хранение. Разреженное хранение (Sparse storage) — это методика хранения в файловой системе, которая может использоваться для сжатия последовательных блоков нулевых байтов при записи файлов. Вместо записи отдельных нулевых байтов на накопитель файловая система записывает, сколько есть повторяющихся нулевых байтов.

Новая Apple File System (APFS) поддерживает разреженное хранение, но Apple Music не использует это свойство и записывает все нулевые байты на накопитель. Я попытался перезаписать свою коллекцию музыки с учётом разреженности, и смог ужать её на 5,2%. Разреженное хранение может снизить требования к объёму накопителя локального компьютера. Однако оно не снизит затраты на услуги хранения резервных копий онлайн и не поможет, когда программы, не знающие о возможности разреженного хранения (например, Apple Music) модифицируют файлы или синхронизируют их с устройствами Apple.

Я уже пару раз говорил, что мы можем пересобрать музыкальные файлы. Если вам хочется вернуть себе пространство, то это можно сделать, пересобрав файлы при помощи кодировщика, который оставляет не так много свободного места, как AMS. Стоит заметить, что пересборка музыкального файла (иногда называемая remuxing) не включает в себя перекодирование блока мультимедийного потока. На практике это означает, что такая операция не приводит к потерям данных в мультимедийной части файла.

Прежде чем я объясню, как выполнить remux пустого пространства из музыки, нужно сказать о том, почему оно вообще там появляется. Как говорилось выше, кодировщики часто резервируют небольшой блок пустого пространства, чтобы можно было изменять метаданные без пересборки всего файла при каждом изменении. Также я говорил, что в разделе метаданных хранится обложка альбома.

Однако AMS не хранит обложку диска внутри каждого музыкального файла. Начиная с iTunes 7 (выпущенной в сентябре 2006 года), приложение стало хранить файлы обложек альбомов отдельно от музыкальных файлов. Согласно данным TUAW, это изменение связано с реализацией эффектной новой функции перелистывания альбомов под названием Cover Flow

Я могу только предполагать, что блок в 500 КБ изначально резервировался под обложку альбома. Серверы Apple должны вставлять его на лету в метаданные в момент передачи. Внешний вид обложки одного альбома может отличаться для разных регионов, поэтому, наверно, это логично? К тому же одна песня может быть частью разных альбомов. Возможно, Apple хранит только одну копию и вставляет метаданные на лету? Когда обложку альбома убрали, похоже, никто в Apple не вспомнил, что нужно уменьшить размер блока метаданных.

Точно я не знаю, но это единственное разумное объяснение, которое я могу придумать. Есть и более зловещая версия — возможно, Apple хотела мотивировать людей перейти на более дорогие iPod и Mac с большим объёмом накопителя. Отделение графики обложек от музыкальных файлов также можно считать действием, усложняющим потребителям перенос коллекций музыки на конкурирующие плееры.

Ниже будет рассказано о внесении изменений в коллекцию музыкальных файлов. Прежде чем выполнять эти инструкции, создайте резервную копию коллекции.

Прежде чем двигаться дальше, вам нужно снова встроить обложки альбомов в музыкальные файлы. Описанный ниже процесс изменяет музыкальные файлы, и iTunes может запутаться в соответствии обложек и файлов. Встраивание обложки решает эту проблему, а также позволит воспроизводить музыку в любом другом музыкальном приложении. Чтобы за раз изменить всю музыкальную коллекцию, можно воспользоваться Re-Embed Artwork для MacOS.

Вы можете заметить, что большинство композиций после встраивания обложек не увеличивается в размерах. Обложка альбома отлично помещается в пустое пространство, уже зарезервированное внутри каждого файла. Чтобы восстановить оставшееся пустое место внутри музыкальных файлов, нужно будет выполнить remux каждого файла с помощью FFmpeg.

Начнём с установки Homebrew, а затем используем его, чтобы установить findutils и ffmpeg. Установив эти зависимости, вы сможете запустить следующую цепочку скриптов в приложении Terminal. Выделите строку целиком и вставьте её в терминал.

find ~/Music/ "(" -name "*.m4a" -and -not -name ".*" ")" -print0 | xargs -0 -P4 -n1 sh -c 'ffmpeg -y -i "$0" -movflags +faststart -map 0 -c copy "$0.tmp.m4a" && mv "$0.tmp.m4a" "$0"'

Она найдёт все музыкальные файлы в папке Music (с помощью команды find), и применит нужную обработку с помощью ffmpeg. Эта операция выполняется без потерь и качество звука не снизится. Стоит заметить, что в процессе будут потеряны некоторые относящиеся к iTunes метаданные (информация о покупке). Из-за этого в дальнейшем могут возникнуть проблемы в iTunes, если вы сначала не встроили в файлы обложки альбомов.

Я всегда выбирал продукты Apple с самым маленьким накопителем и до краёв заполнял их музыкой. Очень жаль, что я мог бы поместить в эти устройства ещё на 6% больше музыки, если бы Apple не заполняла файлы нулевыми байтами! Я не считаю, что это злонамеренное действие со стороны Apple. Вероятно, это была ошибка инженера, остававшаяся незамеченной более десятка лет и так и не устранённая.

Комментарии 49

    +2

    Интересно конечно, но давно не актуально. C появлением Apple Music и других сервисов с музыкой по подписке, покупка музыки в iTunes стала просто невыгодна и бессмыслена

      +65
      Как бы так сказать: первый звоночек сделал росвсёзабан со своими ковровыми бомбардировками телеграма, когда отваливалось всё что угодно. Второй звоночек был вот прям щяс — гудбай спотифай.
      Если музыка лежит у меня локально на диске, то я спокойно слушаю её когда мне удобно и где мне удобно, хоть на луне, хоть на дне марианской впадины, главное плеер с наушниками не забыть(и закачать на него музыку). Если музыка по подписке, а тем более «online only», то увы, слушатель полностью находится во власти сервиса.
        –4

        Комп или нотик с собой таскаете?)

        Я вот не представляю себе как слушать новое музло если не будет Apple Music или Spotify с их количеством плейлистов.

        Ну то есть я понимаю процесс, но он меня отправляет в 98 год, что меня повергает в депрессию.

          +40
          Зачем комп :) 128Гб памяти + SDXC карточка, даже если упороться и хранить всё во flac, то хватит надолго, плюс зачем в плеере держать те треки, которые не нравятся? Новое музло — я не знаю, мне хватает мониторинга лейблов на тему «а что там новенького вышло». И у меня другая проблема — то, что я слушаю даже шазам иногда не может определить, не говоря уже о том, чтобы оно было в наличии на всяких стриминговых сервисах.
            –30

            Понятия не имею что такое sdxc и flac, наверно что-то нужное)

            Я новые треки получаю из плейлистов, которые играют рандомно+новинки, которые подкидывает индустрия ежедневно в подборке. Я ленивый, совершенно полностью и что-то искать точно не буду, максимум shazam-add playlist)

              +16
              SDXC — очень большая флешка :) Flac — штука для аудиофилов, которые слышат как басист лажает даже в вагоне метро, когда надо орать, чтобы тебя собеседник услышал, жрёт намного больше места, чем мп3, а по звуку в вагоне метро хрен отличить :) Рандомы пробовал, но увы, всё работает совершенно не так, как оно надо, особенно если группа слегка меняла стили в процессе своего существования, The Kovenant, Summoning или Therion из довольно попсовых вариантов к примеру.
                +1

                С FLAC ещё организационный момент, что стараются и на площадках в раздачах контролировать оригинальность и в магазинах. Это конечно совсем не гарантирует, что в него не разожмут mp3

                  0

                  Это конечно совсем не гарантирует, что в него не разожмут mp3

                  Смеха ради можно такой подозрительный flac превратить в mp3, а потом обратно в тот же flac. Если оригинальный flac будет по весу такой же, как и перекодированный, то значит оригинальный был получен из mp3.

                    +6

                    После кодировки подозрительного flac в mp3 вы получите слегка (в зависимости от битрейта) другой трек и сравнивать будете тёплое с мягким.

                    А всего-то надо было открыть спектральным анализатором...

                      +1

                      После кодировки подозрительного flac в mp3 вы получите слегка (в зависимости от битрейта) другой трек и сравнивать будете тёплое с мягким

                      Да, он может быть слега другой. Но энтропия файла изменится незначительно, если этот flac был ранее получен расжатием mp3.

                      А всего-то надо было открыть спектральным анализатором...

                      Всё верно. Но мой эксперимент покажет тоже самое, если (flac -> mp3 -> flac) не изменился по объёму, то значит на этапе (flac -> mp3) не была отброшена та часть спектра, за счёт которой работает сжатие с потерями у mp3, а значит с высокой вероятностью в оригинальном файле её и не было.

                        +1

                        А вы попробуйте...

                        Насчет спектрального анализатора - я могу накрутить параметры психоакустики и фильтров так, что выглядеть спектр будет "как надо", но внутри будет "кваканье и мяуканье".
                        А предикативная модель flac действительно лучше отрабатывает на данных, прошедших mp3, что логично - энтропии-то меньше.

                        0

                        там в первую очередь спектр смотрят в крайней вч области

                      0

                      Flac — штука для аудиофилов, которые слышат как басист лажает даже в вагоне метро, когда надо орать, чтобы тебя собеседник услышал,

                      а еще говорят, но лично я в это не верю, что они слышат разницу даже в силовых проводах!

                        0

                        Они слышат разницу в составе воздуха

                          +4

                          В момент появления разницы в составе воздуха обычно раздаётся характерный звук и появляется характерный запах, и всем, кто рядом с источником градиента состава становится не до музыки.

                            0

                            не, не... там есть вечный спор про "бескислородную" медь... а когда слышат, что ты собрал систему на бытовых медных проводах - впадают в истерику :)

                            первое время я смотрел на это всё с интересом, а потом подумал головой и сделал выводы. Так что единственная разница сейчас в проводах для меня - это изоляция (если это касается авто: потрескается она в мороз или нет)... ну помимо других очевидных ТТХ.

                          +3

                          Flac — штука для аудиофилов, которые слышат как басист лажает даже в вагоне метро...

                          Не согласен. Сам слушаю в mp3, ибо не слышу разницы. Возможно ценность flac-а в том, что децентрализируется хранение исходника в первозданном (в разумных пределах) качестве? Это как ценность хранения RAW удачных снимков. Для печати нужен CMYK, человеку хватит JPG-а, а вот утратить RAW нельзя.

                            +2
                            Я в рамках «кинуть в плеер чтобы в дороге слушать». Так то да, лучше хранить в исходном варианте.
                      +4

                      Ну вот Spotify уже нет, в Я.Музыке кое-чего нет, что хотелось бы иногда слушать, а с новыми релизами, судя по всему, будет совсем никак... Так что да, поставил в свои планы на свободное время освежить информацию, что там из UPnP media servers ещё живое есть и как его на свой сервер поставить. Благо коллекция lossless'а на пару терабайт успешно переждала времена, когда я ей изменял со стримингом :)

                        +2

                        с новыми релизами, судя по всему, будет совсем никак

                        Есть вероятность, что со старыми тоже. и в Apple Music и в Spotify периодически пропадают (и появляются снова) некоторые альбомы, потому что срок лицензии закончился на страну, в которой слушают. Я думаю, в Я.Музыке всё не сильно иначе.

                          +2

                          Если хочется локальное подобие стримингов, посмотрите в сторону Airsonic-Advanced ( https://github.com/airsonic-advanced/airsonic-advanced ), который является форком Airsonic, который является форком Libresonic, который является форком Subsonic, который был опенсорсным до версии 6.0.

                          Для Android можно использовать приложение DSub.

                            0

                            Спасибо, гляну. Во времена оные держал у себя minidlna, а на андроиде - мобильную версию foobar2000. Но что-то там изрядно глючило, уже не помню точно.

                              0

                              всегда есть вариант использовать plex media server или emby, ставишь на сервачёк, скармливаешь ему локальную коллекцию музыки/сериалов/кинца/комиксов и оно тебе доступно везде где есть браузер, приложение, или хоть что-то что умеет dlna (но в случае dlna работает только в локалке).

                              0
                              Спасибо, звучит интересно.
                              А то я сейчас воюю с Ampache (не хочет сабсоник апи работать) и пробую funkwhale.

                              UPDATE: попробовал DSub — работает с ампачем. Но встает вопрос, почему все другие клиенты отказывались работать?
                            +1

                            Я вот не представляю себе как слушать новое музло если не будет Apple Music или Spotify с их количеством плейлистов.

                            радио

                              +2

                              Так радио в Apple Music🤷‍♂️

                          +8

                          Когда VK перешли на другого лицензиара музыки, часть годных треков заменились на их иначе аранжированные аналоги, а часть стали недоступными. И оно мне надо? ;)

                          +70

                          Этого достаточно, чтобы добавить примерно 1250 эмодзи в метаданные каждой из композиций.

                          Как определить, что автор оригинала - американец младше 25. Американец постарше измерял бы это пространство в футбольных полях

                            +4
                            И сколько футбольных полей влазит в 5 КБ? :p
                              +45
                              Очевидно же, что 5 КилоБургеров имеют ширину 5 000 * 2 3/4 дюйма, что есть 10 375 дюймов, или 864.5 футов, длина же футбольного поля — 360 футов, так что в 5 КБ — 2.4 футбольных поля
                                0

                                Это ведь без учёта высоты ворот.

                                  +1

                                  Мне кажется, закралась ошибка.

                                  5000 * 2,75 = 13750" = 1146 ft = 3,18 поля.

                                  Если конечно 2¾" == 2,75".

                                  А, понял, у вас нолик в 10375 случайно видимо переехал.

                                    0
                                    Вооот, уже появляются альтернативные теории, как в опросах сколько будет 6/2(1+2)
                                0
                                Автор оригинала — норвежец из Осло: www.ctrl.blog/about
                                +4

                                Смешались в кучу конелюди. Apple Music != iTunes Store. Это раз. Ни то, ни другое не занимает место в iCloud, это два. Вероятно, будут занимать, если скачаны локально на устройстве, и вы делаете backup, но если они у вас куплены, вы их можете скачать из iTunes Store в любое время. О чём статья – вообще непонятно.

                                  +1

                                  Автор оригинала вероятно хотел показать, какой он умный! 😌

                                    +1

                                    Ни то, ни другое не занимает место в iCloud

                                    занимает то что было куплено на другой площадке и выгружено туда ручками

                                      0

                                      Нет, не занимает, можно хранить до 100.000 песен (это включает загруженные "ручками", добавленные из Apple Music, но не включает купленные в iTunes Store).

                                      https://www.imore.com/icloud-music-library-ultimate-guide

                                      https://support.apple.com/en-us/HT204926

                                      Я прямо сейчас смотрю на содержимое своего iCloud и не вижу там музыки, хотя загрузил её около 50 Гб.

                                        0

                                        Однако многое поменялось за те годы что я не щупал яблок

                                        Извиняюсь был не прав

                                      +2

                                      Из iTunes можно скачать музыку на локальное устройство и сделать с ними то, что пишет в статье автор.

                                        0

                                        Можно. Но зачем?

                                      –7

                                      Никогда не понимал для чего пихать в файл с музыкой обложку альбома. Тэга с названием оного более чем достаточно.

                                      Давайте еще туда же биографию исполнителя целиком заливать. И родословную всех его кошек.

                                        +12

                                        Кстати, хорошая идея. У некоторых песен очень интересная история, все равно на фоне размера самого трека 10 КБ из Википедии ничего не изменят, а почитать в процессе прослушивания было бы интересно. Может быть есть софт, который сам такое добавляет в теги mp3?

                                          +1

                                          В Яндекс музыке можно включить такую фишку - перед началом очередного трека Алиса рассказывает интересный факт о нём, его авторе или истории его создания.

                                            0

                                            Да, но факты там совсем небольшие, в одно предложение. Да и в теги mp3 такие вещи все равно Я.Музыка не вписывает. Хотелось бы это все иметь офлайн в коллекции вместе с треками.

                                          +17

                                          Можно текст песни. Если слушаешь со смарттелефона песню на иностранном языке, то можно сразу можно текст увидеть.

                                            +2

                                            > Если слушаешь со смарттелефона песню на иностранном языке

                                            Только такие и слушаем :)

                                            +1

                                            В свое время iPod сделал революцию в области как прослушивания музыки, так и в сфере музыкальных проигрывателей в целом по большей части за счет своего невероятно красивого дизайна, который сопровождался таким же красивым скевоморфичным интерфейсом. Грубо говоря, именно эта обложка альбома позволяла людям не дрочить кнопку "вниз", а прокручивать ну просто идеальный со стороны внешнего вида список альбомов (как в настоящей виниловой коллекции) легким движением руки - прокручиванием сенсорного колеса. И точно так же было при включении трека - ты сразу понимал, что сейчас играет.

                                              +1

                                              Лично мое мнение что это дело исключительно плеера.

                                              Умеет он подтягивать обложки, тексты, биографии - замечательно. Но пихать все это в сам музыкальный трек, хранить по 20 копий одной и той же обложки? Для чего тогда нужны тэги?

                                              В общем, мое мнение что так себе идея.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое