私はこのコードを使用して、ビデオ情報を抽出しますffprobe:
ffprobe -show_streams -of json -v quiet -i input.mp4
すべてのストリームの情報が出力に表示されますが、v:0およびa:0ストリームの情報のみが必要です。
ストリーム選択に-select_streams
オプションがあることは知っていますが、-select_streams v:0
のような引数を1つだけ受け入れます。
-select_streams
を2つの引数v:0
とa:0
で使用することはできますか、それとも2回使用できますか?
ffprobe -show_framesの出力を特定のオーディオおよびビデオストリームに制限したいという同様のシナリオがありました。
-select_streamsは複数を受け入れることはできないようですstream_specifierまた、同じffprobeコマンドに対して複数回提供することもできません。
さらに、ffprobeは、ffmpegのように-mapパラメータを受け入れません。このパラメーターにより、ffmpegは特定のストリームを処理でき、複数回提供できます。
私がやったことは、ffmpeg -mapを使用して必要なストリームをフィルタリングし、出力をffprobe -show_framesに次のようにパイプすることです。
ffmpeg -i INPUT -map 0:0 -map 0:1 -c copy -f matroska - | ffprobe -show_frames -
いくつかの注意:
私はパーティーに遅れていることを知っていますが、他の誰かが似たようなものを検索した場合( ここ から):
ffprobe -show_streams -select_streams a INPUT
ここで、aはaudioを表し、もちろん次のように置き換えることができます。
2つの異なるストリーム(オーディオとビデオなど)を表示する場合は、ffprobeを2回実行する必要があることに注意してください。
より多くのグッズについては、非常に一般的に書かれていますが、以下を確認することもできます: https://trac.ffmpeg.org/wiki/FFprobeTips
-select_streams
引数を省略し、-show_entries
引数を使用して、次のように出力に表示するフィールドを渡すことができます。
ffprobe -show_streams -show_entries format=bit_rate,filename,start_time:stream=duration,width,height,display_aspect_ratio,r_frame_rate,bit_rate -of json -v quiet -i input.mp4
これにより、次のような出力が得られます。
{
"programs": [
],
"streams": [
{
"width": 360,
"height": 202,
"display_aspect_ratio": "16:9",
"r_frame_rate": "2997/100",
"duration": "68.601935",
"bit_rate": "449366",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0
},
"tags": {
"language": "eng",
"handler_name": "VideoHandler"
}
},
{
"r_frame_rate": "0/0",
"duration": "68.475646",
"bit_rate": "65845",
"disposition": {
"default": 1,
"dub": 0,
"original": 0,
"comment": 0,
"lyrics": 0,
"karaoke": 0,
"forced": 0,
"hearing_impaired": 0,
"visual_impaired": 0,
"clean_effects": 0,
"attached_pic": 0
},
"tags": {
"language": "eng",
"handler_name": "SoundHandler"
}
}
],
"format": {
"filename": "input.mp4",
"start_time": "0.000000",
"bit_rate": "522013"
}
}
Powershellに示されているように、返されるJSONオブジェクトストリームを使用して、必要なストリームにインデックスを付けることができます。
PS C:\Users\User> $json.streams[0]
width : 360
height : 202
display_aspect_ratio : 16:9
r_frame_rate : 2997/100
duration : 68.601935
bit_rate : 449366
disposition : @{default=1; dub=0; original=0; comment=0; lyrics=0; karaoke=0; forced=0; hearing_impaired=0; visual_impaired=0; clean_effects=0; attached_pic=0}
tags : @{language=eng; handler_name=VideoHandler}
PS C:\Users\User> $json.streams[1]
r_frame_rate : 0/0
duration : 68.475646
bit_rate : 65845
disposition : @{default=1; dub=0; original=0; comment=0; lyrics=0; karaoke=0; forced=0; hearing_impaired=0; visual_impaired=0; clean_effects=0; attached_pic=0}
tags : @{language=eng; handler_name=SoundHandler}
さまざまなタイプのストリームから取得できる主要なフィールド名のリストがここにあります: https://trac.ffmpeg.org/wiki/FFprobeTips