diff --git a/src/media/media_encoder.cpp b/src/media/media_encoder.cpp
index 6d924939bb9bca63d8751e7968f0ea815dfa8635..21dfe25365a7ff4b928f56c68be4024b531ccea3 100644
--- a/src/media/media_encoder.cpp
+++ b/src/media/media_encoder.cpp
@@ -521,7 +521,7 @@ void MediaEncoder::prepareEncoderContext(bool is_video)
         encoderName = "encoder?";
 
 
-    encoderCtx_->thread_count = std::thread::hardware_concurrency();
+    encoderCtx_->thread_count = std::min(std::thread::hardware_concurrency(), is_video ? 16u : 4u);
     RING_DBG("[%s] Using %d threads", encoderName, encoderCtx_->thread_count);