Provavelmente, existem muitas maneiras diferentes de fazer isso, dependendo da ferramenta que você deseja usar para analisar a saída. Uma maneira é fazer com que mkvmerge
produza JSON e, em seguida, analise-o com jq
. Por exemplo, para obter todas as faixas de áudio:
mkvmerge --identify --identification-format json sample.mkv | jq '.tracks[] | select(.type=="audio")'
Você pode especificar todos os tipos de critérios em jq
, por exemplo, .id=="2"
para a faixa 2 etc. Talvez você possa até fazer a comparação / classificação com jq
, dependendo do que você deseja fazer, ver man jq
para detalhes.
Você também pode armazenar alguma saída filtrada de jq
em uma variável do shell e usar várias chamadas jq
para extrair todos os campos em outras variáveis do shell. (Possivelmente há uma maneira de fazer isso em paralelo, mas eu não sei).
Editar
Quanto à taxa de bits: eu tentei com uma amostra mkv
que contém AAC
audio, mas nem mediainfo
nem mkvinfo
deram qualquer bitrate puramente para áudio em primeiro lugar. Possivelmente, poderíamos calculá-lo a partir de outras informações, como o total de bits usados para essa faixa e a duração total, mas não estou familiarizado o suficiente com os internos de um contêiner mkv para identificar qual é o número.
O .tracks[] | select(.type=="audio")
lê "transmita todas as informações no campo track
e, em seguida, selecione aquelas que têm um campo type
que é igual a audio
". Digamos que você tenha algo como
{
"codec": "AAC",
"id": 1,
"properties": {
"audio_channels": 2,
"audio_sampling_frequency": 44100,
"codec_id": "A_AAC",
"codec_private_data": "1210",
"codec_private_length": 2,
"default_duration": 23219954,
"default_track": true,
"enabled_track": true,
"forced_track": true,
"language": "und",
"minimum_timestamp": 0,
"number": 2,
"uid": 2897612726
},
"type": "audio"
}
salve-o em um arquivo ou variável. Pipe isto em um segundo comando jq
como jq '.properties.audio_channels'
para obter subcampos. Não tenho certeza de como você pretende passar por várias trilhas ou o que você quer fazer, mas você pode fazer muito apenas com jq
consultas sozinho.
Editar
Para obter o ID, o nome do codec, o codec id e o número de canais em uma única linha, faça algo como
jq '[[.id, .codec, .properties.codec_id, .properties.audio_channels] | map(tostring) | join(",")] | join("\n")'
no valor salvo (ou adicione à expressão original).
O% externo [...]
captura o fluxo de registros JSON, o% interno[...]
constrói uma lista que pode ser join
ed com uma vírgula após converter números em sequências e, em seguida, a lista externa também é join
ed por novas linhas. Eu acho que um poderia se livrar das cotações com opções de linha de comando, se necessário.
Veja também sort
se você quiser classificar primeiro o número de canais, etc.
Isso está realmente se transformando em uma pergunta "como faço para usar jq
propriamente", então talvez no google a jq
tutorial, ou faça uma nova pergunta / novas perguntas?