diff --git a/config.cpp b/config.cpp index a39a9376..cae13bae 100644 --- a/config.cpp +++ b/config.cpp @@ -20,6 +20,8 @@ video_t video { 24, // gop_size 35, // crf + 4, // threads + "baseline"s, // profile "superfast"s, // preset "zerolatency"s // tune @@ -118,6 +120,7 @@ void parse_file(const char *file) { int_f(vars, "max_b_frames", video.max_b_frames); int_f(vars, "gop_size", video.gop_size); int_f(vars, "crf", video.crf); + int_f(vars, "threads", video.threads); string_f(vars, "profile", video.profile); string_f(vars, "preset", video.preset); string_f(vars, "tune", video.tune); diff --git a/config.h b/config.h index 58338185..e51ce41b 100644 --- a/config.h +++ b/config.h @@ -11,6 +11,8 @@ struct video_t { int gop_size; int crf; // higher == more compression and less quality + int threads; // Number threads used by ffmpeg + std::string profile; std::string preset; std::string tune; diff --git a/sunshine.conf.example b/sunshine.conf.example index e8c8603c..7d406b64 100644 --- a/sunshine.conf.example +++ b/sunshine.conf.example @@ -28,6 +28,10 @@ gop_size = 24 # Higher value means more compression, but less quality crf = 28 +# Number of threads used by ffmpeg to encode the video +# threads = 4 + + # See x264 --fullhelp for the different presets # profile = baseline # preset = superfast diff --git a/video.cpp b/video.cpp index 7ed9c86b..c78d5818 100644 --- a/video.cpp +++ b/video.cpp @@ -104,7 +104,7 @@ void encodeThread( ctx->slices = config.slicesPerFrame; ctx->thread_type = FF_THREAD_SLICE; - ctx->thread_count = std::min(config.slicesPerFrame, 4); + ctx->thread_count = config::video.threads; AVDictionary *options {nullptr};