В киноиндустрии часто встречаются аудиофайлы WAV, содержащие метаданные, в блоке iXML RIFF. Один из простых способов прочитать эти метаданные - открыть файл WAV в текстовом редакторе, таком как BBEdit, Notepad ++ или даже TextEdit. Но с командной строкой cat
или tail
она не работает, я просто вижу мусорные символы. Я использую macOS 10.13, если это имеет значение. Чем cat
отличаются эти приложения для редактирования текста?
Вот пример файла с iXML полностью внизу: http://www.gallery.co.uk/ixml/examples/usesEntireiXMLSpec.WAV
command-line
audio
notepad++
Эллиот Б
источник
источник
strings usesEntireiXMLSpec.WAV
для извлечения текстовых строк.Ответы:
Когда
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)
чтобы попытаться извлечь данные ASCII XML из среды двоичных данных в файле.Из этих вариантов, я думаю,
strings(1)
может быть наиболее перспективным для вас. Он просматривает файл в поисках непрерывных серий (строк) печатаемых символов ASCII и автоматически выводит любые найденные строки. Так как XML является чисто ASCII для печати,strings(1)
следует распечатать все это, пропуская все двоичные аудиоданные.источник