Использование cat для присоединения mp3 файлов. Что это за черное колдовство?
Мой друг просто использовал простой cat
, чтобы объединить два mp3 файла,...
cat file1.mp3 file2.mp3 > out.mp3
... и полученный файл отлично воспроизводится, воспроизводя одну песню, а затем следующую.
Что это за черная магия? Что случилось с заголовками, метаданными? Как это может работать? Продолжительность даже отображается правильно.
Ответы
Ответ 1
MP3 файл - это не что иное, как исходные данные потока MPEG2-Layer 3 (аудио), не существует структуры заголовка уровня файла, например, длительность, исходный источник, информация о кодировке. Поток MP3 состоит из блоков, начинающихся с маркера синхронизации FF Fx, поэтому произвольные данные, такие как теги ID3, могут быть размещены в любом месте и не будут влиять на звук. Игроки либо предполагают продолжительность от битрейта и размер файла, если теги ID3 не перечисляют эту информацию или не выполняют полную проверку файла, чтобы точно вычислить его.
Ответ 2
Не забывайте, что игроки, как правило, готовы обрабатывать переменные битрейты, так что каждый кадр может иметь другой битрейт в любом случае.
Что касается метаданных, то это нечетная утка; даже если id3 теги с обоих треков будут включены в новый файл, большинство игроков будут искать только теги в конце файл для отображения пользователю и просто пропускать встроенные теги в середине файла, как известно, "не-музыкальное" содержимое. Некоторые могут играть в мусор или крушение, но я сомневаюсь, что они были бы популярны, если бы они были хрупкими.
Обратите внимание, что mp3-заголовки не кодируют какую-либо информацию об общем размере файла - все они рассчитаны во время выполнения. (Возможно, через магию.)
Назад, когда я пытался выучить немецкий язык, слушая потоковые радиостанции, я часто использовал dd
, чтобы разделить гигантские потоки, угадывая, как далеко в трек, который я хотел запустить, и прекратить порезы... неэлегантно, но нет перекодирование, и мой плеер справился с этим.