Para selecionar os tipos de codecs de áudio e vídeo e excluir h264
video:
$ jq '.format.filename as $path |
[.streams[]? | select(.codec_type=="audio"
or (.codec_type=="video"
and .codec_name!="h264")) |
{(.codec_type): .codec_name, $path}] |
group_by(.path) | map(add) | .[]' input.json
$ jq --version
jq-1.5-1-a5b5cbe
Se um comando shell se tornar complexo e precisar de mais do que algumas linhas; Eu mudo para o Python mais detalhado para gerenciar a complexidade:
result = dict(path=data['format']['filename'])
for stream in data['streams']:
if (stream['codec_type'] == 'audio'
or (stream['codec_type'] == 'video'
and stream['codec_name'] != 'h264')):
result[stream['codec_type']] = stream['codec_name'] # last value wins
data
é a entrada ( data = json.loads(json_text)
) e result
é a saída desejada ( print(json.dumps(result))
).
Deve ser relativamente simples adaptar o código acima para o seu caso particular se você estiver mais familiarizado com uma programação imperativa em Python do que com um estilo mais funcional em jq
.