Создание корректного списка воспроизведения JSON из каталога файлов с помощью MediaInfo Command Line и jq - PullRequest
0 голосов
/ 31 августа 2018

Я использую командную строку MediaInfo v18.08 в Ubuntu для анализа нескольких файлов в каталоге и вывода JSON, например: mediainfo * --output=JSON

Который выводит следующий JSON для каждого файла (немного урезанный)

{
    "media": {
        "@ref": "openingmusic.mp3",
        "track": [
            {
                "@type": "General",
                "Duration": "17.789",
                "Encoded_Library": "LAME3.98r"
            },
            {
                "@type": "Audio",
                "Format": "MPEG Audio",
                "Encoded_Library_Settings": "-m s -V 2 -q 3 -lowpass 18.6 --vbr-old -b 32"
            }
        ]
    }
}

Но я хочу только подмножество этого JSON, поэтому я использовал jq-1.5-1

mediainfo *.mp3 --output=JSON | jq '. | {duration: .media.track[0].Duration, pubDate: .media.track[0].File_Modified_Date_Local, url: .media."@ref"}'

Отлично, за исключением того, что между элементами нет ,, весь лот не обернут в [], и, конечно, хотя я могу пометить эту часть, если я присоединяюсь к выводу, я получаю запятую. 1013 *

Как правильно это сделать, пожалуйста?

1 Ответ

0 голосов
/ 31 августа 2018

Вы можете использовать опцию --slurp:

  • - хлебать / -s:
    Вместо запуска фильтра для каждого объекта JSON на входе, прочитайте весь поток ввода в большой массив и запустите фильтр только один раз.

в сочетании с map для запуска фильтра по каждому элементу массива: jq -s 'map({duration: .media.track[0].Duration, pubDate: .media.track[0].File_Modified_Date_Local, url: .media."@ref"})'

Тогда на выходе все равно будет массив.

...