2016-01-27 16 views
9

Wir müssen erkennen, das Video Bitrate einen HLS Stream mit ffprobe unter Verwendung der m3u8 Datei der .ts zu erkennen.Wie Video-Bitrate von HLS/M3U8 Datei mit ffprobe

Wenn ich die m3u8 verwende, kann ich die Dauer erhält, Abmessungen, Codecs, Audio-Bitrate , aber kein Video Bitrate in der Antwort von ffprobe versehen zur Verfügung.

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 diesem Beispiel oben, ich weiß, dass Video um 520Kbps ist, sondern muß einen Weg finden, dass programmatisch mit entweder ffprobe oder jeder anderen Art und Weise zu lesen. Mit dem, was ich derzeit habe, kann ich die meisten benötigten Informationen erhalten, aber mir fehlt ein wichtiger Wert, der das Video Bitrate ist.

Welche anderen Optionen könnte ich versuchen?

Danke!

Antwort

2

Für das Video-Bitrate können Sie tun:

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

die komprimierten Paketgrößen und Dauer zu erhalten (in Bytes bzw. Sekunden) für eine Reihe von Frames. Führen Sie es für eine Weile aus und berechnen Sie dann die durchschnittliche Bitrate für die Gesamtdauer.

1

oben In diesem Beispiel weiß ich, dass Video ist um 520Kbps, sondern muß einen Weg finden, dass mit entweder ffprobe oder jede anderen Weise programmatisch zu lesen.

Der Text in Ihrer gezeigt HLS-Datei hat einen Eintrag: MITTELWERT-BANDBREITE: 599686
FFProbe sagt AAC Audio-Bitrate ist: 79 kb/s

das Video-Bitrate erhalten können Sie tun, um diese Formel:

HLS Average-Bandbreite minus FFProbe Audio-Bitrate = Geschätzte Video-Bitrate

mit Ihren Zahlen ... (599.686 - 79000) = 520686.

Diese tatsächlich bestätigt Ihre "Ich weiß, dass Video um 520Kbps ist". Holen Sie einfach die HLS-Textdatei in eine String und verwenden Sie einige String-Funktionen (oder auch Reguläre Ausdrücke), um die erste Zahl zu extrahieren.

Ich hoffe, es hilft.

1

der beste Weg, um die durchschnittliche Bandbreite zu erkennen ist ffmpeg und pv Befehl wie folgt kombiniert werden:

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

Sie pv installieren müssen möglicherweise apt-get install pv Hoffe, dass es Ihnen geholfen.