diff --git a/doc/APIchanges b/doc/APIchanges
index 475db5d951dc09566a5cb43b20db9290ab12045c..237d39e442e50cb3337c503bfa8cc08d24b125f2 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil:     2012-10-22
 
 API changes, most recent first:
 
+2014-04-xx - xxxxxxx - lavu 53.09.0 - log.h
+  Add AV_LOG(c) macro to have 256 color debug messages.
+
 2014-04-xx - xxxxxxx - lavu 52.72.100 - opt.h
   Add AV_OPT_MULTI_COMPONENT_RANGE define to allow return
   multi-component option ranges.
diff --git a/libavutil/log.c b/libavutil/log.c
index af293e724b669974d1ac787872d016f38557b11f..b39196d5ff1ba608d4b21c00655c414207f55b0a 100644
--- a/libavutil/log.c
+++ b/libavutil/log.c
@@ -126,9 +126,11 @@ static void check_color_terminal(void)
         background = attr_orig & 0xF0;
     }
 #elif HAVE_ISATTY
+    char *term = getenv("TERM");
     use_color = !getenv("NO_COLOR") && !getenv("AV_LOG_FORCE_NOCOLOR") &&
                 (getenv("TERM") && isatty(2) || getenv("AV_LOG_FORCE_COLOR"));
-    if (getenv("AV_LOG_FORCE_256COLOR"))
+    if (   getenv("AV_LOG_FORCE_256COLOR")
+        || strstr(term, "256color"));
         use_color *= 256;
 #else
     use_color = getenv("AV_LOG_FORCE_COLOR") && !getenv("NO_COLOR") &&
@@ -136,7 +138,7 @@ static void check_color_terminal(void)
 #endif
 }
 
-static void colored_fputs(int level, const char *str)
+static void colored_fputs(int level, int tint, const char *str)
 {
     if (!*str)
         return;
@@ -157,6 +159,12 @@ static void colored_fputs(int level, const char *str)
                 (color[level] >> 4) & 15,
                 color[level] & 15,
                 str);
+    } else if (tint && use_color == 256) {
+        fprintf(stderr,
+                "\033[48;5;%dm\033[38;5;%dm%s\033[0m",
+                (color[level] >> 16) & 0xff,
+                tint,
+                str);
     } else if (use_color == 256 && level != AV_LOG_INFO/8) {
         fprintf(stderr,
                 "\033[48;5;%dm\033[38;5;%dm%s\033[0m",
@@ -250,6 +258,10 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
     char line[LINE_SZ];
     static int is_atty;
     int type[2];
+    int tint = av_clip(level >> 8, 0, 256);
+
+    level &= 0xff;
+
 
     if (level > av_log_level)
         return;
@@ -278,11 +290,11 @@ void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
     }
     strcpy(prev, line);
     sanitize(part[0].str);
-    colored_fputs(type[0], part[0].str);
+    colored_fputs(type[0], 0, part[0].str);
     sanitize(part[1].str);
-    colored_fputs(type[1], part[1].str);
+    colored_fputs(type[1], 0, part[1].str);
     sanitize(part[2].str);
-    colored_fputs(av_clip(level >> 3, 0, 6), part[2].str);
+    colored_fputs(av_clip(level >> 3, 0, 6), tint, part[2].str);
 end:
     av_bprint_finalize(part+2, NULL);
 #if HAVE_PTHREADS
diff --git a/libavutil/log.h b/libavutil/log.h
index f16e38221b42a9c53439df2cf9cbe53a7d01ec8d..48abd4a1b91103dfcd1db9f33c87a1f10777c2f0 100644
--- a/libavutil/log.h
+++ b/libavutil/log.h
@@ -187,6 +187,14 @@ typedef struct AVClass {
 
 #define AV_LOG_MAX_OFFSET (AV_LOG_DEBUG - AV_LOG_QUIET)
 
+/**
+ * Sets additional colors for extended debugging sessions.
+ * Requires 256color terminal support. Use outside debugging is not
+ * recommended.
+ */
+
+#define AV_LOG_C(x) (x << 8)
+
 /**
  * @}
  */
diff --git a/libavutil/version.h b/libavutil/version.h
index 9bf499416ee7c7c72589faf7900352b364acaf45..38f9bce6f7e005b0d8341ab21630b185927342f0 100644
--- a/libavutil/version.h
+++ b/libavutil/version.h
@@ -56,7 +56,7 @@
  */
 
 #define LIBAVUTIL_VERSION_MAJOR  52
-#define LIBAVUTIL_VERSION_MINOR  72
+#define LIBAVUTIL_VERSION_MINOR  73
 #define LIBAVUTIL_VERSION_MICRO 100
 
 #define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \