2016-12-13 5 views
1

Я использую этот код для извлечения видео информации по ffprobe:ffprobe выбрать аудио и видео потоки

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

Информация о всех потоках появляется на выходе, а мне нужна только информация V: 0 и : 0 потоков.

Я знаю, что есть опция -select_streams для выбора потока, но она принимает только один аргумент вроде: -select_streams v:0.

Могу ли я использовать -select_streams по двум аргументам v:0 и a: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 за видео;
  • : с 1 для аудиопакетов принадлежащих к аудиопотока с индексом 1;
  • V: 99 для видео пакетов, принадлежащих квидеопотока с индексом 99 и так далее.

Обратите внимание, что если вы хотите просмотреть 2 разных потока (например, аудио и видео), вам нужно дважды запустить ffprobe.

Для получения дополнительной информации, пожалуйста, ознакомьтесь с: https://trac.ffmpeg.org/wiki/FFprobeTips