[FFmpeg-devel] [PATCH] ffprobe: report audio bit rate in stream description

Matthieu Bouron matthieu.bouron at gmail.com
Tue Feb 7 10:44:22 CET 2012


2012/2/6 Clément Bœsch <ubitux at gmail.com>:
> On Mon, Feb 06, 2012 at 06:53:31PM +0100, Matthieu Bouron wrote:
>> 2012/2/6 Stefano Sabatini <stefasab at gmail.com>:
>> > On date Monday 2012-02-06 12:13:02 +0100, Matthieu Bouron encoded:
>> >> 2012/2/6 Stefano Sabatini <stefasab at gmail.com>:
>> >> > On date Sunday 2012-02-05 22:26:14 +0100, Matthieu Bouron encoded:
>> >> >> $title
>> >> >
>> >> >> From 4bca8fd1dddfcf4851a0ba1cc6bd52d597e9ab8b Mon Sep 17 00:00:00 2001
>> >> >> From: Matthieu Bouron <matthieu.bouron at gmail.com>
>> >> >> Date: Sun, 5 Feb 2012 21:59:23 +0100
>> >> >> Subject: [PATCH] ffprobe: report audio bit rate in stream description
>> >> >>
>> >> >> ---
>> >> >>  doc/ffprobe.xsd |    1 +
>> >> >>  ffprobe.c       |    8 +++++++-
>> >> >>  2 files changed, 8 insertions(+), 1 deletions(-)
>> > [...]
>> >> Patch updated.
>> >> >
>> >> > Some output formats (compact/csv) demand a fixed number of fields, so
>> >> > in you need to display a field even in the case the information is not
>> >> > available. In this case this should work:
>> >> >
>> >> >              if (bit_rate > 0) print_int    ("bit_rate", bit_rate);
>> >> >              else              print_str_opt("bit_rate", "N/A");
>> >> >
>> >> > Also I'm not sure this is a good idea, since this only shows the
>> >> > *uncompressed data* bitrate, which is in general different from the
>> >> > effective bitrate.
>> >> This code has the same behaviour as ffmpeg (libavcodec/util.c). If
>> >> bits_per_sample is set, the bit_rate is computed but if not
>> >> AVCodecContext.bit_rate is used.
>> >
>> > Yes, I wonder if it would make sense to export the get_bit_rate()
>> > function, or even better to set the value right into the codec
>> > context which should be even more robust.
>>
>> New patches attached, bit rate entry is now reported for all kind of
>> streams and use avcodec_get_bit_rate.
>>
>> >
>> >> Maybe this entry should be called avg_bit_rate ?
>> > --
>> > FFmpeg = Foolish & Forgiving Magic Practical Epic Ghost
>> > _______________________________________________
>> > ffmpeg-devel mailing list
>> > ffmpeg-devel at ffmpeg.org
>> > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
>> From 58120e1560826786b653b05083e5f06b43da910f Mon Sep 17 00:00:00 2001
>> From: Matthieu Bouron <matthieu.bouron at smartjog.com>
>> Date: Mon, 6 Feb 2012 17:07:18 +0100
>> Subject: [PATCH 1/2] libavcodec: add avcodec_get_bit_rate function
>>
>> ---
>>  libavcodec/avcodec.h |    8 ++++++++
>>  libavcodec/utils.c   |    4 ++--
>>  libavcodec/version.h |    2 +-
>>  3 files changed, 11 insertions(+), 3 deletions(-)
>>
>> diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
>> index 43c2128..b2b1999 100644
>> --- a/libavcodec/avcodec.h
>> +++ b/libavcodec/avcodec.h
>> @@ -3512,6 +3512,14 @@ AVCodec *avcodec_find_decoder_by_name(const char *name);
>>  void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
>>
>>  /**
>> + * Return the codec average bit rate
>> + *
>> + * @param the codec context
>
> missing "codec": @param codec the codec context
>
>> + * @return The codec average bit rate
>
> nit: s/The/the/
>
>> + */
>> +int avcodec_get_bit_rate(AVCodecContext *codec);
>> +
>> +/**
>>   * Return a name for the specified profile, if available.
>>   *
>>   * @param codec the codec that is searched for the given profile
>> diff --git a/libavcodec/utils.c b/libavcodec/utils.c
>> index 0df3d7f..6914511 100644
>> --- a/libavcodec/utils.c
>> +++ b/libavcodec/utils.c
>> @@ -1517,7 +1517,7 @@ AVCodec *avcodec_find_decoder_by_name(const char *name)
>>      return NULL;
>>  }
>>
>> -static int get_bit_rate(AVCodecContext *ctx)
>> +int avcodec_get_bit_rate(AVCodecContext *ctx)
>>  {
>>      int bit_rate;
>>      int bits_per_sample;
>> @@ -1661,7 +1661,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
>>              snprintf(buf + strlen(buf), buf_size - strlen(buf),
>>                       ", pass 2");
>>      }
>> -    bitrate = get_bit_rate(enc);
>> +    bitrate = avcodec_get_bit_rate(enc);
>>      if (bitrate != 0) {
>>          snprintf(buf + strlen(buf), buf_size - strlen(buf),
>>                   ", %d kb/s", bitrate / 1000);
>> diff --git a/libavcodec/version.h b/libavcodec/version.h
>> index ac28707..9a11b6f 100644
>> --- a/libavcodec/version.h
>> +++ b/libavcodec/version.h
>> @@ -22,7 +22,7 @@
>>
>>  #define LIBAVCODEC_VERSION_MAJOR 54
>>  #define LIBAVCODEC_VERSION_MINOR  0
>> -#define LIBAVCODEC_VERSION_MICRO 102
>> +#define LIBAVCODEC_VERSION_MICRO 103
>>
>
> minor increment (and micro reset, to 100).

Thanks, i updated the patches.

>
>>  #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
>>                                                 LIBAVCODEC_VERSION_MINOR, \
>> --
>> 1.7.8.3
>>
>
>> From 334b61c3d3bacc6278e02be43fac0a95e57b1825 Mon Sep 17 00:00:00 2001
>> From: Matthieu Bouron <matthieu.bouron at smartjog.com>
>> Date: Mon, 6 Feb 2012 11:58:14 +0100
>> Subject: [PATCH 2/2] ffprobe: report bit rate in stream description
>>
>> ---
>>  doc/ffprobe.xsd |    1 +
>>  ffprobe.c       |    5 +++++
>>  2 files changed, 6 insertions(+), 0 deletions(-)
>>
>> diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
>> index e7104ef..ad8b3e3 100644
>> --- a/doc/ffprobe.xsd
>> +++ b/doc/ffprobe.xsd
>> @@ -113,6 +113,7 @@
>>        <xsd:attribute name="nb_frames"        type="xsd:int"/>
>>        <xsd:attribute name="nb_read_frames"   type="xsd:int"/>
>>        <xsd:attribute name="nb_read_packets"  type="xsd:int"/>
>> +      <xsd:attribute name="bit_rate"         type="xsd:int"/>
>>      </xsd:complexType>
>>
>>      <xsd:complexType name="formatType">
>> diff --git a/ffprobe.c b/ffprobe.c
>> index 8ef9180..1a4554e 100644
>> --- a/ffprobe.c
>> +++ b/ffprobe.c
>> @@ -1414,6 +1414,7 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
>>      AVCodec *dec;
>>      char val_str[128];
>>      const char *s;
>> +    int bit_rate;
>>      AVRational display_aspect_ratio;
>>      struct print_buf pbuf = {.s = NULL};
>>
>> @@ -1501,6 +1502,10 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
>>          }
>>      }
>>
>> +    bit_rate = avcodec_get_bit_rate(dec_ctx);
>> +    if (bit_rate > 0) print_int    ("bit_rate", bit_rate);
>> +    else              print_str_opt("bit_rate", "N/A");
>> +
>
> nit: could be inlined.
>
> [...]
>
> --
> Clément B.
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-libavcodec-add-avcodec_get_bit_rate-function.patch
Type: text/x-diff
Size: 2339 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120207/c1406352/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-ffprobe-report-bit-rate-in-stream-description.patch
Type: text/x-diff
Size: 1735 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20120207/c1406352/attachment-0001.bin>


More information about the ffmpeg-devel mailing list