diff --git a/doc/ffprobe.xsd b/doc/ffprobe.xsd
index 3984b7dc2e784e51dbf9b7c02cc10f74d3c87e79..f8e9fe9809a090ebefea1a358a4f1961b0c80dc9 100644
--- a/doc/ffprobe.xsd
+++ b/doc/ffprobe.xsd
@@ -83,6 +83,7 @@
       <xsd:attribute name="index"            type="xsd:int" use="required"/>
       <xsd:attribute name="codec_name"       type="xsd:string" />
       <xsd:attribute name="codec_long_name"  type="xsd:string" />
+      <xsd:attribute name="profile"          type="xsd:string" />
       <xsd:attribute name="codec_type"       type="xsd:string" />
       <xsd:attribute name="codec_time_base"  type="xsd:string" use="required"/>
       <xsd:attribute name="codec_tag"        type="xsd:string" use="required"/>
diff --git a/ffprobe.c b/ffprobe.c
index d53ec11624589fd1c21bed5204d2d18ebfa5bc9a..c98bdac3ffa3d1a31a3e702f253211ed59d75e85 100644
--- a/ffprobe.c
+++ b/ffprobe.c
@@ -1364,6 +1364,7 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
     print_int("index", stream->index);
 
     if ((dec_ctx = stream->codec)) {
+        const char *profile = NULL;
         if ((dec = dec_ctx->codec)) {
             print_str("codec_name",      dec->name);
             print_str("codec_long_name", dec->long_name);
@@ -1372,6 +1373,11 @@ static void show_stream(WriterContext *w, AVFormatContext *fmt_ctx, int stream_i
             print_str_opt("codec_long_name", "unknown");
         }
 
+        if (dec && (profile = av_get_profile_name(dec, dec_ctx->profile)))
+            print_str("profile", profile);
+        else
+            print_str_opt("profile", "unknown");
+
         s = av_get_media_type_string(dec_ctx->codec_type);
         if (s) print_str    ("codec_type", s);
         else   print_str_opt("codec_type", "unknown");