diff --git a/cmdutils.c b/cmdutils.c
index 37b8e6e44e3acd956966cf25284fcec5e5e84d6a..5ed8919d156bcbee70d396b788709762653d5383 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -417,9 +417,6 @@ void show_formats(void)
 {
     AVInputFormat *ifmt=NULL;
     AVOutputFormat *ofmt=NULL;
-    URLProtocol *up=NULL;
-    AVCodec *p=NULL, *p2;
-    AVBitStreamFilter *bsf=NULL;
     const char *last_name;
 
     printf(
@@ -463,8 +460,12 @@ void show_formats(void)
             name,
             long_name ? long_name:" ");
     }
-    printf("\n");
+}
 
+void show_codecs(void)
+{
+    AVCodec *p=NULL, *p2;
+    const char *last_name;
     printf(
         "Codecs:\n"
         " D..... = Decoding supported\n"
@@ -529,11 +530,27 @@ void show_formats(void)
         printf("\n");
     }
     printf("\n");
+    printf(
+"Note, the names of encoders and decoders do not always match, so there are\n"
+"several cases where the above table shows encoder only or decoder only entries\n"
+"even though both encoding and decoding are supported. For example, the h263\n"
+"decoder corresponds to the h263 and h263p encoders, for file formats it is even\n"
+"worse.\n");
+}
+
+void show_bsfs(void)
+{
+    AVBitStreamFilter *bsf=NULL;
 
     printf("Bitstream filters:\n");
     while((bsf = av_bitstream_filter_next(bsf)))
         printf("%s\n", bsf->name);
     printf("\n");
+}
+
+void show_protocols(void)
+{
+    URLProtocol *up=NULL;
 
     printf("Supported file protocols:\n");
     while((up = av_protocol_next(up)))
@@ -541,13 +558,6 @@ void show_formats(void)
     printf("\n");
 
     printf("Frame size, frame rate abbreviations:\n ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif\n");
-    printf("\n");
-    printf(
-"Note, the names of encoders and decoders do not always match, so there are\n"
-"several cases where the above table shows encoder only or decoder only entries\n"
-"even though both encoding and decoding are supported. For example, the h263\n"
-"decoder corresponds to the h263 and h263p encoders, for file formats it is even\n"
-"worse.\n");
 }
 
 int read_yesno(void)
diff --git a/cmdutils.h b/cmdutils.h
index 826f00092f4f9b744c7f9e31f0477b531fb1bc07..efc8d02602d02079d4a976dc7543dfa70e4db214 100644
--- a/cmdutils.h
+++ b/cmdutils.h
@@ -157,6 +157,24 @@ void show_license(void);
  */
 void show_formats(void);
 
+/**
+ * Prints a listing containing all the codecs supported by the
+ * program.
+ */
+void show_codecs(void);
+
+/**
+ * Prints a listing containing all the bit stream filters supported by the
+ * program.
+ */
+void show_bsfs(void);
+
+/**
+ * Prints a listing containing all the protocols supported by the
+ * program.
+ */
+void show_protocols(void);
+
 /**
  * Returns a positive value if reads from standard input a line
  * starting with [yY], otherwise returns 0.
diff --git a/ffmpeg.c b/ffmpeg.c
index 4d50768711c4b3e08360c7ce1509c1043cad4ca4..5d6d994d42a86b3edaae6b678c9015247fc4fb41 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3828,7 +3828,10 @@ static const OptionDef options[] = {
     { "L", OPT_EXIT, {(void*)show_license}, "show license" },
     { "h", OPT_EXIT, {(void*)show_help}, "show help" },
     { "version", OPT_EXIT, {(void*)show_version}, "show version" },
-    { "formats", OPT_EXIT, {(void*)show_formats}, "show available formats, codecs, protocols, ..." },
+    { "formats"  , OPT_EXIT, {(void*)show_formats  }, "show available formats" },
+    { "codecs"   , OPT_EXIT, {(void*)show_codecs   }, "show available codecs" },
+    { "bsfs"     , OPT_EXIT, {(void*)show_bsfs     }, "show available bit stream filters" },
+    { "protocols", OPT_EXIT, {(void*)show_protocols}, "show available protocols" },
     { "f", HAS_ARG, {(void*)opt_format}, "force format", "fmt" },
     { "i", HAS_ARG, {(void*)opt_input_file}, "input file name", "filename" },
     { "y", OPT_BOOL, {(void*)&file_overwrite}, "overwrite output files" },
diff --git a/ffplay.c b/ffplay.c
index 45d7586c98b8ab7ace191b221b9d7cb4db018bf1..b8912e11344c33114091852bf78d5cdb31b425fe 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -2456,7 +2456,10 @@ static const OptionDef options[] = {
     { "h", OPT_EXIT, {(void*)show_help}, "show help" },
     { "version", OPT_EXIT, {(void*)show_version}, "show version" },
     { "L", OPT_EXIT, {(void*)show_license}, "show license" },
-    { "formats", OPT_EXIT, {(void*)show_formats}, "show available formats, codecs, protocols, ..." },
+    { "formats"  , OPT_EXIT, {(void*)show_formats  }, "show available formats" },
+    { "codecs"   , OPT_EXIT, {(void*)show_codecs   }, "show available codecs" },
+    { "bsfs"     , OPT_EXIT, {(void*)show_bsfs     }, "show available bit stream filters" },
+    { "protocols", OPT_EXIT, {(void*)show_protocols}, "show available protocols" },
     { "x", HAS_ARG | OPT_FUNC2, {(void*)opt_width}, "force displayed width", "width" },
     { "y", HAS_ARG | OPT_FUNC2, {(void*)opt_height}, "force displayed height", "height" },
     { "s", HAS_ARG | OPT_VIDEO, {(void*)opt_frame_size}, "set frame size (WxH or abbreviation)", "size" },
diff --git a/ffserver.c b/ffserver.c
index da45cfa4435fdc6ad90d9259bcc1bde7e639800c..7abaed885b2ce59e1c77d46d9f2f113a289df396 100644
--- a/ffserver.c
+++ b/ffserver.c
@@ -4475,7 +4475,10 @@ static const OptionDef options[] = {
     { "h", OPT_EXIT, {(void*)opt_show_help}, "show help" },
     { "version", OPT_EXIT, {(void*)show_version}, "show version" },
     { "L", OPT_EXIT, {(void*)show_license}, "show license" },
-    { "formats", OPT_EXIT, {(void*)show_formats}, "show available formats, codecs, protocols, ..." },
+    { "formats"  , OPT_EXIT, {(void*)show_formats  }, "show available formats" },
+    { "codecs"   , OPT_EXIT, {(void*)show_codecs   }, "show available codecs" },
+    { "bsfs"     , OPT_EXIT, {(void*)show_bsfs     }, "show available bit stream filters" },
+    { "protocols", OPT_EXIT, {(void*)show_protocols}, "show available protocols" },
     { "loglevel", HAS_ARG | OPT_FUNC2, {(void*)opt_loglevel}, "set libav* logging level", "loglevel" },
     { "n", OPT_BOOL, {(void *)&no_launch }, "enable no-launch mode" },
     { "d", 0, {(void*)opt_debug}, "enable debug mode" },