В киноиндустрии часто встречаются аудиофайлы WAV, содержащие метаданные, в блоке iXML RIFF. Один из простых способов прочитать эти метаданные - открыть файл WAV в текстовом редакторе, таком как BBEdit, Notepad++ или даже TextEdit. Но с командной строкой cat или tail это не работает, я просто вижу мусорные символы. Я использую macOS 10.13, если это имеет значение. Почему cat отличается от этих приложений для редактирования текста?

Вот пример файла с iXML полностью внизу: http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV

1 ответ1

2

Когда cat выводит файл, он выводит его побайтно, как есть, без замены пробелов или точек или каких-либо других символов подстановки. Таким образом, когда он выводит данные двоичного аудиосэмпла ранее в.WAV-файл, некоторые из этих байтов совпадают с управляющими кодами терминала старой школы и «escape-последовательностями» (последовательностями байтов, начинающимися с символа "ESC", которые можно использовать для таких вещей, как изменение цвета текста или фона, экран терминала и переместите курсор на экран терминала). Ваш эмулятор терминала (Terminal.app или iTerm2 и т.д.) Пытается соблюдать эти управляющие коды и escape-последовательности, что исключает обычное отображение текста и делает это непредсказуемым образом.

Многие терминальные инструменты имеют опции, позволяющие вам работать с файлами, в которых некоторые двоичные данные смешаны с чистым печатным текстом ASCII. Например, cat имеет опцию -v чтобы заменить печатные последовательности вместо управляющих символов ASCII. Также есть vis(1) , od(1) , hexdump(1) , strings(1) и другие. Вы также можете использовать такие инструменты, как sed(1) , grep(1) и awk(1) чтобы попытаться извлечь XML-данные ASCII из двоичных данных в файле.

Я думаю, что из этих вариантов наиболее подходящим для вас может быть strings(1) . Он просматривает файл в поисках средних и длинных непрерывных циклов (строк) печатаемых символов ASCII и автоматически выводит любые найденные строки. Так как XML является чисто печатным ASCII, strings(1) должен распечатать все это, пропуская все двоичные аудиоданные.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .