From ef07cf0414f7dbb53d89704f1885c6be4ead310dd34107a654b19baead900123 Mon Sep 17 00:00:00 2001 From: copecone Date: Sun, 14 Jun 2026 12:52:58 +0900 Subject: [PATCH] Optimize Encoding Setup & SWS Config --- Util/FFmpeg/FFmpegNativeEncoder.cs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Util/FFmpeg/FFmpegNativeEncoder.cs b/Util/FFmpeg/FFmpegNativeEncoder.cs index 00f641e..c5a4282 100644 --- a/Util/FFmpeg/FFmpegNativeEncoder.cs +++ b/Util/FFmpeg/FFmpegNativeEncoder.cs @@ -300,9 +300,10 @@ namespace ADOFAIRenderer.Util.FFmpeg // ── 기본 비디오 파라미터 설정 ── _pCodecContext->width = _settings.Width; _pCodecContext->height = _settings.Height; - // libvvenc는 자체적으로 멀티스레딩을 관리하므로 FFmpeg 측 스레딩을 비활성화합니다. - // 다른 인코더는 thread_count = 0 (자동 설정)을 사용합니다. - _pCodecContext->thread_count = encoderName == "libvvenc" ? 1 : 0; + // thread_count = 0: FFmpeg이 시스템 CPU 코어 수에 맞춰 자동으로 스레드를 할당합니다. + // libvvenc의 경우에도 FFmpeg 래퍼가 thread_count를 VVenC 내부 스레드 수로 전달하므로, + // 0(자동)을 설정해야 모든 코어를 활용한 병렬 인코딩이 가능합니다. + _pCodecContext->thread_count = 0; // ── 픽셀 포맷 설정 ── // 비디오 인코더는 일반적으로 YUV420P 또는 NV12 형식의 입력을 기대합니다. @@ -672,14 +673,14 @@ namespace ADOFAIRenderer.Util.FFmpeg // 여기서는 해상도 변환 없이 색공간만 변환하지만, sws_scale은 // 동시에 리사이즈도 수행할 수 있습니다. // - // SWS_BILINEAR: 바이리니어 보간법. 색공간만 변환할 때는 품질 차이가 미미하며, - // 속도와 품질의 균형이 좋은 기본 옵션입니다. + // SWS_POINT: 최근접 이웃 보간법. 해상도 변환 없이 색공간만 변환하므로 + // 보간 알고리즘이 출력 품질에 영향을 주지 않으며, SWS_POINT가 가장 빠릅니다. // // 참고: https://ffmpeg.org/doxygen/trunk/group__libsws.html _pSwsContext = ffmpeg.sws_getContext( _settings.Width, _settings.Height, AVPixelFormat.AV_PIX_FMT_RGBA, _settings.Width, _settings.Height, _dstPixFmt, - (int)SwsFlags.SWS_BILINEAR, null, null, null); + (int)SwsFlags.SWS_POINT, null, null, null); if (_pSwsContext == null) throw new Exception("소프트웨어 스케일러를 초기화하는 데 실패했습니다."); @@ -772,7 +773,7 @@ namespace ADOFAIRenderer.Util.FFmpeg case RateControlMode.CQP: // 기본값 18: H.264에서 "시각적으로 거의 무손실"에 가까운 품질. // 다른 코덱에서도 비슷한 수준의 품질을 제공합니다. - var qpValue = (_settings.QualityValue >= 0 && _settings.QualityValue <= 51) ? _settings.QualityValue : 18; + var qpValue = _settings.QualityValue is >= 0 and <= 51 ? _settings.QualityValue : 18; if (encoderName.Contains("nvenc")) {