2016-12-13 146 views
1

我通过ffprobe使用此代码提取视频信息:ffprobe选择音频和视频流

ffprobe -show_streams -of json -v quiet -i input.mp4 

,而我需要的诉只有所有信息流的信息出现在输出:0和:0流。

我知道有-select_streams选项用于流选择,但它只接受一个参数,如:-select_streams v:0

我可以使用-select_streams两个参数v:0a:0或使用它两次吗?

回答

1

您可以简单地忽略-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

0

我知道我迟到了,但如果别人搜索(从here)类似的东西:

ffprobe -show_streams -select_streams a INPUT 

其中一个代表音频和当然可以被替换

  • v for video;
  • 一个:1属于音频流索引1音频分组;
  • 五:99属于视频流指数99等等视频数据包

请注意,如果您想查看2个不同的流(如音频和视频),则需要运行ffprobe两次。

对于更多好吃的东西,虽然写得很一般,但您也可以查看:https://trac.ffmpeg.org/wiki/FFprobeTips