web-dev-qa-db-ja.com

ffprobeはオーディオおよびビデオストリームを選択します

私はこのコードを使用して、ビデオ情報を抽出します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:0a:0で使用することはできますか、それとも2回使用できますか?

7
Amin Fazlali

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 -

いくつかの注意:

  • このマルチプレクサはシーク不可能な出力(stdout)をサポートしているため、ffmpegコマンドで-f matroskaを使用しました
  • -c copyは、選択したストリームのトランスコーディングを回避するために必要です。
6
YoavG

私はパーティーに遅れていることを知っていますが、他の誰かが似たようなものを検索した場合( ここ から):

ffprobe -show_streams -select_streams a INPUT

ここで、aaudioを表し、もちろん次のように置き換えることができます。

  • v for video;
  • a:1 for オーディオパケット所属オーディオストリーム with index 1;
  • v:99ビデオパケットに属するビデオストリームインデックス99など。

2つの異なるストリーム(オーディオとビデオなど)を表示する場合は、ffprobeを2回実行する必要があることに注意してください。

より多くのグッズについては、非常に一般的に書かれていますが、以下を確認することもできます: https://trac.ffmpeg.org/wiki/FFprobeTips

6
thvs86

-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

3
yarg nad