私はこのコードを持っています:
track1=$(mkvmerge -I sample.mkv | sed -ne '/^Track ID [0-9]*: audio ([^)]*).* language:eng.*/ { s/^[^0-9]*\([0-9]*\):.*/\1/;H }; $ { g;s/[^0-9]/,/g;s/^,//;p }' | cut -c1)
英語の言語に一致する1つのトラックを検索します。
同じ言語のオーディオトラックを比較し、最高品質のオーディオトラックを見つけるスクリプトを作成したいと思います。
ただしmkvinfo
、mkvmerge
およびmediainfo
は特定のトラックIDに関する情報を取得できないようです。必要な情報だけを取得するために出力全体を解析する方法がわかりません。
どうすればいいですか?フォーマット、ビットレート、チャンネル数、サイズなどの品質を推測するために必要なすべてを検索しますtrack1channels
。
私はこのパズルの他の解決策を探しています。
答え1
出力を解析するために使用したいツールに応じて、これを行う方法はいくつかあります。 1つの方法は、mkvmerge
JSONを作成してからを使用してすべてのjq
オーディオトラックを取得することです。
mkvmerge --identify --identification-format json sample.mkv | jq '.tracks[] | select(.type=="audio")'
トラック2など、jq
さまざまな条件をで指定できます。実行したい操作に応じ.id=="2"
て、を使用して比較/並べ替えることもできます。詳細についてはをご覧ください。jq
man jq
jq
フィルタ処理された出力の一部をシェル変数に保存し、複数のjq
呼び出しを使用してすべてのフィールドを別のシェル変数に抽出することもできます。 (並列アプローチがあるかもしれませんが、わかりません。)
編集する
ビットレートについて:オーディオをmkv
含むサンプルを試しましたが、最初から純粋なオーディオビットレートを提供しませんでした。トラックで使用されている総ビット数や総持続時間などの他の情報に基づいてこれを計算することもできますが、どの数値がどの数値であるかを把握するには、mkvコンテナの内部について十分な知識がありません。AAC
mediainfo
mkvinfo
.tracks[] | select(.type=="audio")
「フィールド内のすべての情報をストリーミングtrack
してからtype
、同じフィールドを持つ情報を選択してください」をお読みくださいaudio
。あなたが次のようなものを手に入れるとしましょう。
{
"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"
}
次に、ファイルまたは変数に保存します。これをサブフィールドのインポートjq
などの2番目のコマンドにパイプします。jq '.properties.audio_channels'
複数のトラックをどのように繰り返すのか、何をしたいのかわかりませんが、jq
クエリだけでできることがたくさんあります。
編集する
1 行に ID、コーデック名、コーデック ID、チャネル数を取得するには、次の手順を実行します.
jq '[[.id, .codec, .properties.codec_id, .properties.audio_channels] | map(tostring) | join(",")] | join("\n")'
保存された値(または元の式に追加)
[...]
JSONレコードストリームは外部からキャプチャされ、内部的にリストが編成されます。リストは[...]
数字を文字列に変換してjoin
カンマで編集でき、外部リストも改行join
を使用して編集されます。必要に応じて、コマンドラインオプションを使用して引用符を削除できるとします。
また、sort
まずチャンネル番号でソートするかどうかなどを考慮してください。
これは実際に「これを正しく使用するにはどうすればよいですかjq
?」という質問になります。したがって、Googleでjq
チュートリアルを検索したり、新しい質問/質問をしたりすることもできます。