Вы когда-нибудь докупали расширенный объём хранилища для 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. Вероятно, это была ошибка инженера, остававшаяся незамеченной более десятка лет и так и не устранённая.

Комментарии (45)


  1. vanyas
    08.04.2022 19:37
    +2

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


    1. JerleShannara
      08.04.2022 21:03
      +59

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


      1. Gachevskii
        08.04.2022 22:06
        -5

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

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

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


        1. JerleShannara
          08.04.2022 22:11
          +37

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


          1. Gachevskii
            08.04.2022 22:26
            -29

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

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


            1. JerleShannara
              08.04.2022 22:31
              +16

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


              1. sim2q
                08.04.2022 23:08
                +1

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


                1. Inanity
                  09.04.2022 12:21

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

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


                  1. chupasaurus
                    09.04.2022 12:48
                    +6

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

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


                    1. Inanity
                      09.04.2022 13:14
                      +1

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

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

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

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


                    1. YMA
                      09.04.2022 19:55
                      +1

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

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


                  1. sim2q
                    10.04.2022 13:28

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


              1. ALexhha
                09.04.2022 14:16

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

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


                1. uis246
                  10.04.2022 02:11

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


                  1. mrbald
                    10.04.2022 12:00
                    +2

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


                  1. net_men
                    11.04.2022 11:53

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

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


              1. Inanity
                09.04.2022 15:17
                +3

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

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


                1. JerleShannara
                  09.04.2022 15:22
                  +2

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


        1. aborouhin
          08.04.2022 22:26
          +4

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


          1. extempl
            09.04.2022 09:11
            +2

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

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


          1. KorDen32
            09.04.2022 10:59
            +2

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

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


            1. aborouhin
              09.04.2022 12:46

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


              1. 13werwolf13
                11.04.2022 09:11

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


            1. anwender95
              11.04.2022 08:06

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

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


        1. Stam_emg
          10.04.2022 16:36
          +1

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

          радио


          1. Gachevskii
            10.04.2022 16:58
            +2

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


    1. Arbane
      09.04.2022 14:12
      +7

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


  1. staticmain
    08.04.2022 19:44
    +68

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

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


    1. DaneSoul
      08.04.2022 20:01
      +4

      И сколько футбольных полей влазит в 5 КБ? :p


      1. staticmain
        08.04.2022 20:07
        +44

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


        1. nochkin
          09.04.2022 05:03

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


        1. SargeT
          10.04.2022 15:55
          +1

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

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

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

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


          1. staticmain
            11.04.2022 02:02

            Вооот, уже появляются альтернативные теории, как в опросах сколько будет 6/2(1+2)


    1. tyomitch
      10.04.2022 15:35

      Автор оригинала — норвежец из Осло: www.ctrl.blog/about


  1. FreeNickname
    08.04.2022 22:49
    +4

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


    1. Ilyasyakubov
      09.04.2022 15:35

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


    1. 13werwolf13
      11.04.2022 09:12

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

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


    1. emaneger
      11.04.2022 09:17

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


  1. JPEGEC
    09.04.2022 03:07
    -8

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

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


    1. Akr0n
      09.04.2022 04:46
      +10

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


      1. Torvald3d
        09.04.2022 10:53
        +1

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


        1. Akr0n
          09.04.2022 16:02

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


    1. RalphMirebs
      09.04.2022 05:46
      +14

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


      1. ASHcommander
        09.04.2022 10:05
        +2

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

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


    1. hetside
      11.04.2022 09:09

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