본문 바로가기
IT생활

동영상 인코딩을 할 때 최대 몇 스레드까지 활용 가능할까? 64스레드 이상 활용 가능할까?

by 우물 밖 개구리. 2025. 2. 1.
반응형

FFmpeg에서 SVT-AV1 인코딩 시 Xeon E5-2697 v4 듀얼(총 72스레드) 활용 가능 여부

SVT-AV1(Scalable Video Technology for AV1)은 Intel이 개발한 고성능 AV1 인코더로, 멀티스레드 및 대규모 병렬 연산에 최적화된 구조를 가지고 있습니다. 하지만 CPU의 전체 스레드를 100% 활용할 수 있는지는 SVT-AV1의 스레드 확장성, 작업 부하, FFmpeg의 옵션 설정에 따라 달라집니다.


1. SVT-AV1의 멀티스레딩 구조

SVT-AV1은 멀티코어 CPU를 최대한 활용하기 위해 여러 개의 병렬 프로세스를 사용합니다. 특히, 인코딩 파이프라인이 여러 개의 스레드로 분산되므로 코어 수가 많을수록 성능 향상이 발생합니다.

하지만, 72스레드(36코어 × 2)의 모든 스레드를 100% 활용할 수 있을지는 몇 가지 요인에 의해 달라집니다.

SVT-AV1의 주요 병렬 처리 요소

  1. Frame Parallelism (프레임 병렬 처리)
    • 여러 개의 프레임을 동시에 처리하는 방식.
    • 많은 코어를 활용할 수 있지만, 비디오가 너무 짧거나 단일 프레임이 너무 작으면 한계를 가질 수 있음.
  2. Tile Parallelism (타일 병렬 처리)
    • AV1은 프레임을 여러 개의 타일(Tile)로 나누어 처리할 수 있음.
    • 타일 개수를 증가시키면 더 많은 스레드를 사용할 수 있음.
  3. Segment Parallelism (세그먼트 병렬 처리)
    • 하나의 프레임을 여러 개의 세그먼트로 나누어 병렬로 처리.
    • 다중 코어 환경에서 중요한 역할을 함.

2. SVT-AV1의 스레드 활용 한계

(1) 단일 인코딩 작업의 최대 스레드 활용률

SVT-AV1은 기본적으로 다중 코어 활용에 최적화되어 있지만, 현실적으로 72스레드를 모두 100% 활용하는 것은 쉽지 않습니다. 그 이유는 다음과 같습니다.

  • 단일 인코딩 프로세스의 스레드 확장성:
    • SVT-AV1은 최대 64스레드까지 효율적으로 활용할 수 있도록 설계되었음.
    • 하지만 그 이상이 되면 **오버헤드(스레드 간 동기화 비용)**가 증가하여 효율이 낮아질 가능성이 큼.
    • 실제로 50~60스레드 정도가 현실적인 최대 활용 스레드 수임.
  • 프레임 크기와 복잡도:
    • 4K 이상의 고해상도 영상에서는 더 많은 스레드를 활용할 수 있지만,
    • 1080p 이하에서는 72스레드를 모두 활용하는 것이 거의 불가능함.
    • 일반적으로 4K 인코딩은 많은 코어를 활용할 수 있지만,
    • 1080p 이하의 해상도에서는 30~40스레드 정도로 충분한 경우가 많음.

(2) 멀티 인코딩 작업 (병렬 인코딩)으로 해결 가능

단일 인코딩 프로세스가 72스레드를 완전히 활용하지 못한다면, 여러 개의 인코딩 프로세스를 병렬로 실행하는 방식으로 활용도를 극대화할 수 있습니다.

예를 들어:

ffmpeg -i input1.mp4 -c:v libsvtav1 -preset 4 -b:v 5000k -threads 36 output1.mp4 &
ffmpeg -i input2.mp4 -c:v libsvtav1 -preset 4 -b:v 5000k -threads 36 output2.mp4 &

위와 같이 두 개의 독립적인 FFmpeg 프로세스를 실행하면, 각각 36스레드를 활용하여 전체 72스레드를 효과적으로 사용할 수 있습니다.


3. FFmpeg에서 SVT-AV1 인코딩 시 72스레드 활용 설정 방법

FFmpeg에서 SVT-AV1을 사용할 때 옵션을 조정하면 멀티스레딩 활용도를 최적화할 수 있습니다.

(1) -threads 옵션 사용

기본적으로 SVT-AV1은 자동으로 스레드를 할당하지만, 명시적으로 설정할 수도 있습니다.

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 4 -b:v 5000k -threads 72 output.mp4

하지만, 위에서 설명했듯이 64스레드 이상에서는 효율성이 떨어질 수 있으므로 64로 제한하는 것이 좋음.

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 4 -b:v 5000k -threads 64 output.mp4

(2) -tile-columns, -tile-rows 설정

타일 기반 병렬 처리를 활용하면 더 많은 스레드를 활용할 수 있습니다.
예를 들어, 4K 해상도라면 다음과 같이 설정할 수 있습니다.

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 4 -b:v 5000k -tile-columns 2 -tile-rows 2 -threads 64 output.mp4

이렇게 하면 한 프레임을 4개의 타일로 나누어 병렬 처리할 수 있으므로 CPU 활용도가 향상됩니다.


(3) -svtav1-params 추가 설정

SVT-AV1의 내부 설정을 직접 제어할 수도 있습니다.

ffmpeg -i input.mp4 -c:v libsvtav1 -preset 4 -b:v 5000k -svtav1-params tune=0:lp=2 output.mp4

여기서:

  • tune=0 → 인코딩 품질/속도 밸런스 설정
  • lp=2 → 논리적 프로세서 활용 정도 조절

4. 최종 결론: 72스레드 완전 활용 가능 여부

가능한 경우:

  • 4K 이상의 고해상도 영상을 인코딩할 때
  • -threads 옵션을 조절하여 64~72스레드로 설정할 때
  • -tile-columns, -tile-rows 옵션을 적절히 조정할 때
  • 동시에 여러 개의 인코딩 작업을 실행할 때

불가능한 경우:

  • 1080p 이하의 영상에서는 72스레드를 100% 활용하기 어려움
  • 단일 인코딩 프로세스에서는 64스레드 이상 사용 시 성능 향상이 크지 않음
  • 너무 낮은 프리셋(preset 8~12)을 사용하면 CPU 활용도가 낮아질 수 있음

결론적으로 단일 인코딩 작업으로 72스레드를 100% 활용하는 것은 현실적으로 어렵지만,

  1. 적절한 옵션 조절 (-threads 64, -tile-columns 2 -tile-rows 2 등)
  2. 멀티 인코딩 작업 수행
    을 통해 CPU 자원을 최대한 활용할 수 있습니다.
반응형