2016-01-27 55 views
9

Dobbiamo rilevare il video bitrate di un flusso HLS con ffprobe utilizzando il file m3u8 del .ts.Come rilevare il bitrate video da file/M3U8 HLS utilizzando ffprobe

Se uso il m3u8, posso ottenere la durata, le dimensioni, i codec utilizzati, audio bitrate, ma non il video bitrate è disponibile nella risposta fornita da ffprobe.

ffprobe -print_format json -show_format -show_streams -show_error http://gfrmedia-video-platform.s3.amazonaws.com/bumbia/2014/06/06/158217_20160126214307_bumbia-hls/hls1056k/158217_640x360-with-mp4-hls_bumbia-hls.m3u8 

ffprobe version 2.8.3 Copyright (c) 2007-2015 the FFmpeg developers 
    built with Apple LLVM version 7.0.0 (clang-700.1.76) 
    configuration: --prefix=/usr/local/Cellar/ffmpeg/2.8.3 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables --enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl --enable-libx264 --enable-libmp3lame --enable-libvo-aacenc --enable-libxvid --enable-vda 
    libavutil  54. 31.100/54. 31.100 
    libavcodec  56. 60.100/56. 60.100 
    libavformat 56. 40.101/56. 40.101 
    libavdevice 56. 4.100/56. 4.100 
    libavfilter  5. 40.101/5. 40.101 
    libavresample 2. 1. 0/2. 1. 0 
    libswscale  3. 1.101/3. 1.101 
    libswresample 1. 2.101/1. 2.101 
    libpostproc 53. 3.100/53. 3.100 
{ 
[http @ 0x7fcf09e19420] No trailing CRLF found in HTTP header. 
Input #0, hls,applehttp, from 'http://gfrmedia-video-platform.s3.amazonaws.com/bumbia/2014/06/06/158217_20160126214307_bumbia-hls/hls1056k/158217_640x360-with-mp4-hls_bumbia-hls.m3u8': 
    Duration: 00:00:11.00, start: 9.940500, bitrate: 0 kb/s 
    Program 0 
    Metadata: 
     variant_bitrate : 0 
    Stream #0:0: Video: h264 (Constrained Baseline) ([27][0][0][0]/0x001B), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 29.97 fps, 29.97 tbr, 90k tbn, 59.94 tbc 
    Stream #0:1: Audio: aac (LC) ([15][0][0][0]/0x000F), 44100 Hz, stereo, fltp, 79 kb/s 
    "streams": [ 
     { 
      "index": 0, 
      "codec_name": "h264", 
      "codec_long_name": "H.264/AVC/MPEG-4 AVC/MPEG-4 part 10", 
      "profile": "Constrained Baseline", 
      "codec_type": "video", 
      "codec_time_base": "1001/60000", 
      "codec_tag_string": "[27][0][0][0]", 
      "codec_tag": "0x001b", 
      "width": 640, 
      "height": 360, 
      "coded_width": 640, 
      "coded_height": 368, 
      "has_b_frames": 0, 
      "sample_aspect_ratio": "1:1", 
      "display_aspect_ratio": "16:9", 
      "pix_fmt": "yuv420p", 
      "level": 30, 
      "chroma_location": "left", 
      "refs": 1, 
      "is_avc": "0", 
      "nal_length_size": "0", 
      "r_frame_rate": "30000/1001", 
      "avg_frame_rate": "30000/1001", 
      "time_base": "1/90000", 
      "start_pts": 900000, 
      "start_time": "10.000000", 
      "bits_per_raw_sample": "8", 
      "disposition": { 
       "default": 0, 
       "dub": 0, 
       "original": 0, 
       "comment": 0, 
       "lyrics": 0, 
       "karaoke": 0, 
       "forced": 0, 
       "hearing_impaired": 0, 
       "visual_impaired": 0, 
       "clean_effects": 0, 
       "attached_pic": 0 
      } 
     }, 
     { 
      "index": 1, 
      "codec_name": "aac", 
      "codec_long_name": "AAC (Advanced Audio Coding)", 
      "profile": "LC", 
      "codec_type": "audio", 
      "codec_time_base": "1/44100", 
      "codec_tag_string": "[15][0][0][0]", 
      "codec_tag": "0x000f", 
      "sample_fmt": "fltp", 
      "sample_rate": "44100", 
      "channels": 2, 
      "channel_layout": "stereo", 
      "bits_per_sample": 0, 
      "r_frame_rate": "0/0", 
      "avg_frame_rate": "0/0", 
      "time_base": "1/90000", 
      "start_pts": 894645, 
      "start_time": "9.940500", 
      "bit_rate": "79931", 
      "disposition": { 
       "default": 0, 
       "dub": 0, 
       "original": 0, 
       "comment": 0, 
       "lyrics": 0, 
       "karaoke": 0, 
       "forced": 0, 
       "hearing_impaired": 0, 
       "visual_impaired": 0, 
       "clean_effects": 0, 
       "attached_pic": 0 
      } 
     } 
    ], 
    "format": { 
     "filename": "http://gfrmedia-video-platform.s3.amazonaws.com/bumbia/2014/06/06/158217_20160126214307_bumbia-hls/hls1056k/158217_640x360-with-mp4-hls_bumbia-hls.m3u8", 
     "nb_streams": 2, 
     "nb_programs": 1, 
     "format_name": "hls,applehttp", 
     "format_long_name": "Apple HTTP Live Streaming", 
     "start_time": "9.940500", 
     "duration": "11.000000", 
     "size": "281", 
     "bit_rate": "204", 
     "probe_score": 100 
    } 
} 

In questo esempio di cui sopra, so che il video è di circa 520Kbps, ma hanno bisogno di trovare un modo per leggere che programatically sia con ffprobe o in qualsiasi altro modo. Con quello che ho attualmente posso ottenere la maggior parte delle informazioni necessarie, ma mi manca un valore importante che è il video bitrate.

Quali altre opzioni potrei provare?

Grazie!

risposta

2

Per il bitrate video si può fare:

ffprobe -select_streams v:0 -show_entries frame=pkt_size,pkt_duration_time <input> 

per ottenere i formati compressi pacchetti e durate (in byte e rispettivamente secondi) per una serie di fotogrammi. Eseguilo per un po ', quindi calcola il bitrate medio per la durata totale.

1

In questo esempio di cui sopra, so che il video è di circa 520Kbps, ma hanno bisogno di trovare un modo di leggere che programatically sia con ffprobe o in qualsiasi altro modo .

Il testo nel file HLS mostrato ha una voce: MEDIA-BANDA: 599686
FFProbe dice AAC audio bitrate è: 79 kb/s

Per ottenere il bitrate video è possibile fare questa formula:

HLS medio-Bandwidth meno FFProbe Audio-Bitrate = Stimato bitrate video

Con i numeri ... (599686 - 79000) = 520686.

Ciò conferma in realtà il vostro "Io so che il video è di circa 520Kbps". Basta ottenere il file di testo HLS in un String e utilizzare alcune funzioni String (o anche le espressioni regolari) per estrarre il primo numero.

Spero che aiuti.

1

il modo migliore per rilevare la larghezza di banda media è di combinare ffmpeg e comando pv in questo modo:

ffmpeg -re -i input.m3u8 -f flv - 2>/dev/null|pv -a >/dev/null 

potrebbe essere necessario installare pv apt-get install pv Spero che ti ha aiutato.