Использование кошки для объединения mp3-файлов.Что это за чёрное колдовство? - PullRequest
22 голосов
/ 03 июня 2011

Мой друг просто использовал старый cat для объединения двух mp3-файлов, ...

cat file1.mp3 file2.mp3 > out.mp3

... и полученный файл прекрасно воспроизводится, воспроизводя одну песнюследующий.

Что это за черная магия?Что случилось с заголовками, метаданными?Как это может работать?Продолжительность даже отображается правильно.

Ответы [ 2 ]

10 голосов
/ 03 июня 2011

Файл MP3 - это не что иное, как необработанные данные потока MPEG2-Layer 3 (аудио), отсутствует структура заголовка уровня файла, например, длительность, исходный источник, информация о кодировке. Поток MP3 состоит из блоков, начинающихся с маркера синхронизации FF Fx, поэтому произвольные данные, такие как теги ID3, могут быть размещены где угодно и не будут влиять на звук. Игроки либо угадывают длительность по битрейту и размеру файла, если теги ID3 не перечисляют эту информацию, либо полностью сканируют файл, чтобы точно рассчитать ее.

9 голосов
/ 03 июня 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...