답변:
사용되는 코덱, ffmpeg 버전 및 CPU 코어 수에 따라 다릅니다. 때로는 코어 당 하나의 스레드 일뿐입니다. 때로는 다음과 같이 더 복잡합니다.
libx264를 사용하면 프레임 스레드의 경우 코어 x 1.5이고 슬라이스 스레드의 경우 코어 x 1입니다.
2014 년 현재 최적의 숫자를 사용합니다.
top
ffmpeg에 대한 다른 옵션으로 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를 악용한다는"관점에서는 최적이 아닐 수 있습니다.
이 답변 중 일부는 조금 오래 되었으므로 Ryzen 5 2600X 시스템의 6 코어 / 12 스레드를 모두 인수 없이 최대로 ffmpeg 4.1
인코딩 하여 추가하고 싶습니다 .libx264
-thread
-vcodec libx264 -profile:v high444 -refs 14 -preset ultrafast -crf 18 -tune fastdecode
따라서 격리 할 몇 가지 변수가 있습니다. 추가해도 -threads 12
효과가 없습니다.
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
옵션 을 사용하면 성능이 향상 될 수 있으므로 특정 수준에서 특정 수준의 테스트를 실행하여 설정을 확인하십시오.