使用MediaInfo命令行和jq从文件目录构建有效的JSON播放列表

时间:2018-08-31 15:22:23

标签: json jq mediainfo

我正在ubuntu上使用MediaInfo命令行v18.08来解析目录中的多个文件并输出JSON,例如:self::

为每个文件输出以下JSON(略微精简)

mediainfo * --output=JSON

但是我只想要该JSON的子集,所以我使用了jq-1.5-1

{ "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" } ] } }

太好了,除了元素之间没有mediainfo *.mp3 --output=JSON | jq '. | {duration: .media.track[0].Duration, pubDate: .media.track[0].File_Modified_Date_Local, url: .media."@ref"}'之外,整个批次都没有用[]包裹,当然,尽管我可以捏造这部分,但是如果我加入输出,则会得到逗号结尾

请问正确的jq方式是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用--slurp选项:

  
      
  • -slurp / -s:
      不必为输入中的每个JSON对象运行筛选器,而是将整个输入流读入一个大型数组,然后仅运行筛选器一次。
  •   

map结合使用以对数组的每个元素运行过滤器:jq -s 'map({duration: .media.track[0].Duration, pubDate: .media.track[0].File_Modified_Date_Local, url: .media."@ref"})'

然后输出仍然是数组。