ffmpeg는 기본적으로 몇 개의 스레드를 사용합니까?


45

-threads <count>ffmpeg에 명령 줄 옵션 이 있음을 알았습니다 . 이 옵션의 기본값은 무엇입니까?

답변:


24

사용되는 코덱, ffmpeg 버전 및 CPU 코어 수에 따라 다릅니다. 때로는 코어 당 하나의 스레드 일뿐입니다. 때로는 다음과 같이 더 복잡합니다.

libx264를 사용하면 프레임 스레드의 경우 코어 x 1.5이고 슬라이스 스레드의 경우 코어 x 1입니다.


감사. ffmpeg가 지원하는 일부 표준 코덱에 대한 기본값에 대한 참조가 있습니까?
Edward Dale

6
그것에 의존하지 마십시오. Linux의 ffmpeg 0.7.8은 기본적으로 1 스레드를 사용합니다.
Barafu Albino

더 나은 결과를 얻기 위해 어떤 가치를 사용할 수 있습니까? 추신 : 나는 안드로이드 프레임 워크에서 FFMpeg를 사용하고 있습니다.
Killer

23

2014 년 현재 최적의 숫자를 사용합니다.

topffmpeg에 대한 다른 옵션으로 CPU로드 (Linux : , Windows : 작업 관리자)를 검사하여 멀티 코어 컴퓨터에서이를 확인할 수 있습니다 .

  • -threads 0 (최적);

  • -threads 1 (단일 스레드);

  • -threads 2 (예 : Intel Core 2 Duo의 경우 2 개의 스레드);

  • none (기본값, 최적).

2015 편집 : 12 코어 CPU에서 일부 ffmpeg 명령은 Linux의 top수에 관계없이 최대 200 % CPU (2 코어 만)를 표시합니다 -threads. 따라서 기본값은 "이 ffmpeg 바이너리가 얻을 수있는만큼 좋은"관점에서 여전히 최적 일 수 있지만 "완전히 내 leet CPU를 악용한다는"관점에서는 최적이 아닐 수 있습니다.


1
이것은 일반적인 처리가 아니라 인코딩에만 적용되는 것 같습니다. 실제로 출력 프레임을 생성하지 않으면 병렬화되지 않습니다. 예를 들어 02:00부터 쉐이킹을 해제하는 경우 02:00부터 병렬 처리 만 수행되지만 02:00까지의 모든 항목은 계속 직렬로 처리해야합니다.
Mehrdad

6

ffmpeg 0.8.10-6과 함께 Ubuntu 14.04에서 2015 년 4 코어 시스템에서 1 코어를 사용했습니다. htop이것을 보여 주었다; 하나의 코어 만 사용되었으며 FullHD 비디오의 변환 속도는 16fps입니다.

를 사용하면 -threads 4모든 CPU 코어가 100 %가되고 변환 속도는 47fps입니다.

다음 명령을 사용했습니다.

$ ffmpeg -i foo.mp4 -y -target pal-dvd -aspect 16:9 dvd-out.mpg

6

이 답변 중 일부는 조금 오래 되었으므로 Ryzen 5 2600X 시스템의 6 코어 / 12 스레드를 모두 인수 없이 최대로 ffmpeg 4.1인코딩 하여 추가하고 싶습니다 .libx264-thread


나는 1800X를 가지고 있으며 16 개의 스레드에 20 %의 사용률이 확산되지는 않지만 몇 가지 선택적 인수를 사용하고 있습니다. -vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode따라서 격리 할 몇 가지 변수가 있습니다. 추가해도 -threads 12효과가 없습니다.
Elaskanator

3

CentOS 6.5 VM (Ryzen 1700 8c / 16t-vm에 16 코어 중 12가 할당 됨)에서 변환하는 중입니다. 480p 영화로 실험 한 결과는 다음과 같습니다.

스레드 옵션 / 변환 속도 (fps @ 60 초)

(none/default)/130fps
-threads 1/70fps
-threads 2/120fps
-threads 4/185fps
-threads 6/228fps
-threads 8/204fps
-threads 10/181fps

흥미로운 부분은 CPU 로딩이었습니다 htop. 130fps 범위에서 감겨 진 옵션을
사용하지 않으면 -threads부하가 적은 모든 코어에로드가 분산됩니다.
하나의 스레드를 사용하면 정확히 하나의 코어를 100 %로드했습니다. 다른 것을 사용하면 또 다른 스프레드로드 상황이 발생했습니다.

보시다시피, 수익이 감소하는 지점이 있으므로 특정 컴퓨터의 -threads 옵션을 조정해야합니다. 내 설정의 경우 특히 -threads 6 (12 코어 시스템)을 사용하면 비디오를 변환 할 때 최상의 FPS가 발생했습니다 (h264에서 x264로 다른 비트 전송률로 변환하여 강제 변환). 실제로 반환 된 스레드가 줄어 듭니다. 그것.

메모리 문제 일 수도 있습니다. VM에 1GB 만 할당되었습니다. 나는 그것을 조정하고 그것이 변경되는지 볼 수 있습니다. 여전히- -threads옵션 을 사용하면 성능이 향상 될 수 있으므로 특정 수준에서 특정 수준의 테스트를 실행하여 설정을 확인하십시오.


"변환하다"는 무슨 뜻입니까? 이상적으로는 정확한 명령입니다.
Ondra Žižka 2

4.1.3 Ubuntu 18.04 및 매우 유사한 결과. 기본값은 "모든 코어에 낮은로드"입니다.
Roel Van de Paar

"12 코어"시스템에서 6 개의 스레드 (CPU가 지정되지 않음, 첫 번째 목록과 다름)에서 최적의 스레드를 얻는 이유는 6이 실제 코어 수이고 12 개 스레드 수이기 때문입니다.
Roel Van de Paar

1

스레딩을 활성화했다고 가정하면 1.5x 수의 코어가 할당되었습니다.


프레임 스레드를위한 1.5 x 개수의 코어. 슬라이스 스레드를위한 1 x 개수의 코어. 이것은 (lib) x264에만 해당됩니다. 다른 인코더의 할당이 무엇인지 잘 모르겠습니다.
llogan

@LordNeckbeard 프레임 스레딩과 슬라이스 스레딩 사이를 전환하는 방법!?
Dr.jacky

1
@ Mr.Hyde 아마도 -x264-params sliced-threads=1. 또는의 사용을 통해 -tune zerolatency.
llogan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.