diff --git a/src/media/libav_deps.h b/src/media/libav_deps.h
index 9038510eca38a073e2df49838e4d4cd93544ef05..50c87c1bcda2cac0623e62f69a102d17dd3b02d5 100644
--- a/src/media/libav_deps.h
+++ b/src/media/libav_deps.h
@@ -70,6 +70,7 @@ extern "C" {
 #include <libavutil/mathematics.h> // for av_rescale_q (old libav support)
 #include <libavutil/imgutils.h>
 #include <libavutil/intreadwrite.h>
+#include <libavutil/log.h>
 }
 
 #include "libav_utils.h"
diff --git a/src/media/libav_utils.cpp b/src/media/libav_utils.cpp
index e77cdf7a8534588f9aadfd758c9637d1bd470543..0f9b89f7efb092081b353a30961a3cf793b9b67f 100644
--- a/src/media/libav_utils.cpp
+++ b/src/media/libav_utils.cpp
@@ -80,8 +80,25 @@ avcodecManageMutex(void **data, enum AVLockOp op)
     return AVERROR(ret);
 }
 
+static constexpr const char* AVLOGLEVEL = "AVLOGLEVEL";
 
-static void init_once()
+static void
+setAvLogLevel()
+{
+    char* envvar = getenv(AVLOGLEVEL);
+    signed level = AV_LOG_ERROR;
+
+    if (envvar != nullptr) {
+        if (not (std::istringstream(envvar) >> level))
+            level = AV_LOG_ERROR;
+
+        level = std::max(AV_LOG_QUIET, std::min(level, AV_LOG_DEBUG));
+    }
+    av_log_set_level(level);
+}
+
+static void
+init_once()
 {
     av_register_all();
     avdevice_register_all();
@@ -92,7 +109,7 @@ static void init_once()
     av_lockmgr_register(avcodecManageMutex);
 
     if (getDebugMode())
-        av_log_set_level(AV_LOG_VERBOSE);
+        setAvLogLevel();
 }
 
 static std::once_flag already_called;