2016-01-27 19 views
9

Chúng ta cần phải phát hiện video bitrate của một dòng HLS với ffprobe bằng cách sử dụng các tập tin m3u8 của .ts.Làm thế nào để phát hiện bitrate video từ HLS tập tin/M3U8 sử dụng ffprobe

Nếu tôi sử dụng m3u8, tôi có thể nhận được trong suốt thời gian, kích thước, codec được sử dụng, âm thanh bitrate, nhưng không có video bitrate có sẵn trong các phản ứng cung cấp bởi 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 
    } 
} 

Trong mẫu này ở trên, tôi biết rằng video là khoảng 520Kbps, nhưng cần phải tìm một cách để đọc mà programatically với một trong hai ffprobe hoặc bất kỳ cách nào khác. Với những gì tôi hiện có, tôi có thể nhận được hầu hết thông tin cần thiết, nhưng tôi thiếu một giá trị quan trọng là video bitrate.

Tôi có thể thử các tùy chọn nào khác?

Cảm ơn!

Trả lời

2

Đối với bitrate video mà bạn có thể làm:

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

để có được kích thước nén gói và thời gian (tính bằng byte và tương ứng giây) cho một loạt các khung. Chạy nó một lúc rồi tính tốc độ bit trung bình cho tổng thời lượng.

1

Trong mẫu này ở trên, tôi biết rằng video là khoảng 520Kbps, nhưng cần phải tìm một cách để đọc mà programatically với một trong hai ffprobe hoặc bất kỳ cách nào khác.

Các văn bản trong tập tin HLS cho thấy bạn có một mục: TRUNG BÌNH-BĂNG THÔNG: 599686
FFProbe nói AAC bitrate âm thanh là: 79 kb/s

Để có được bitrate video mà bạn có thể làm công thức này:

HLS trung bình-Bandwidth trừ FFProbe nghe Bitrate = Ước tính bitrate video

Với con số của bạn ... (599.686 - 79000) = 520686.

Điều này thực sự khẳng định của bạn "Tôi biết rằng video là khoảng 520Kbps". Đơn giản chỉ cần lấy tệp văn bản HLS vào một String và sử dụng một số hàm chuỗi (hoặc thậm chí biểu thức chính quy) để trích xuất số đầu tiên.

Hy vọng điều đó sẽ hữu ích.

1

cách tốt nhất để phát hiện các băng thông trung bình là kết hợp ffmpeg và lệnh pv như thế này:

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

Bạn có thể phải cài đặt pv apt-get install pv Hy vọng nó sẽ giúp bạn.

Các vấn đề liên quan