Подтвердить что ты не робот

Использование cat для присоединения mp3 файлов. Что это за черное колдовство?

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

cat file1.mp3 file2.mp3 > out.mp3

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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