Как определить битрейт видео из файла HLS/M3U8 с помощью ffprobe

Нам нужно определить битрейт видео HLS потока с ffprobe, используя m3u8 файл .ts.

Если я использую m3u8, я могу получить продолжительность, размеры, используемые кодеки, битрейт аудио, но в ответе, предоставленном 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
    }
}

В приведенном выше примере я знаю, что скорость видео составляет около 520 Кбит/с, но мне нужно найти способ прочитать это программно с помощью ffprobe или любым другим способом. С тем, что у меня есть сейчас, я могу получить большую часть необходимой информации, но мне не хватает одного важного значения, а именно битрейта видео.

Какие еще варианты я мог бы попробовать?

Спасибо!


person Guillermo    schedule 27.01.2016    source источник


Ответы (3)


Для битрейта видео вы можете сделать:

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

чтобы получить размеры и продолжительность сжатых пакетов (в байтах и, соответственно, секундах) для серии кадров. Запустите его на некоторое время, затем рассчитайте средний битрейт за всю продолжительность.

person aergistal    schedule 28.01.2016

лучший способ определить среднюю пропускную способность — объединить команду ffmpeg и pv следующим образом:

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

Возможно, вам придется установить pv apt-get install pv Надеюсь, это помогло вам.

person Classsic    schedule 23.08.2016

В приведенном выше примере я знаю, что видео имеет скорость около 520 Кбит/с, но мне нужно найти способ прочитать это программно с помощью ffprobe или любым другим способом.

Текст в показанном файле HLS имеет запись: AVERAGE-BANDWIDTH: 599686
FFProbe говорит, что битрейт аудио AAC составляет: 79 кбит/с

Чтобы получить битрейт видео, вы можете сделать эту формулу:

Средняя пропускная способность HLS минус битрейт аудио FFProbe = расчетный битрейт видео

С вашими цифрами... (599686 - 79000) = 520686.

Это фактически подтверждает ваше «Я знаю, что видео имеет скорость около 520 Кбит/с». Просто поместите текстовый файл HLS в String и используйте некоторые строковые функции (или даже регулярные выражения) для извлечения первого числа.

Надеюсь, поможет.

person VC.One    schedule 01.02.2016