ffmpeg 스레드 설정을 변경하는 방법


14

튜브 사이트 에서 작업 . mp4 로 변환하기 위해 Linux 전용 서버에서 ffmpeg 를 통해 비디오를 실행하고 있습니다 .

서버 사양 :

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    2
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 60
Stepping:              3
CPU MHz:               3491.749
BogoMIPS:              6983.49
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-7

테스트 중 문제는 한 번에 4-5 개만 수행하더라도 서버로드가 평균 약 36 명으로 급증한다는 것입니다. 이는 한 사람에 불과합니다. 나는 그것이 열리면 많은 사람들이 한 번에 업로드 할 것이라고 상상합니다.

보인다 는 FFmpeg가 전환 당 사용할 수있는 모든 자원을 사용하려고합니다.

변경할 수있는 스레드 설정이 있다고 들었지만 찾을 수 없습니다. 8 CPU 서버가 있습니다. 전환에만 사용되므로 최상의 설정은 2와 4 사이가 될 것이라고 들었습니다. 테스트 할 수 있습니다.

하지만이 설정을 어떻게 변경합니까? 온라인에서 볼 수있는 모든 내용이이 설정에 대해 설명하지만 설정을 변경하는 단계는 아닙니다.

linux  ffmpeg  cpu  mp4 

답변:


17

원하는 옵션 플래그는 실제로 -threads단지 하나의 스레드에 대해 다음과 같이 사용합니다.

ffmpeg -i somefile.wmv -c:a libfdk_aac -c:v libx264  -threads 1 transcoded.mp4

그러나 일부 VM 아키텍처가 실제로 모든 것을 두 번 읽고 쓰는 사실은 말할 것도없고, 크기 조정, 필터 적용 및 최종 프레임 품질 / 프레임 속도와 같이 서버로드와 운영 시간을 증가시키는 미묘한 부분이 있습니다. 그리고 한 번은 사실상 !!!)

속도를 높이기위한 몇 가지 팁이 있습니다.

  1. 한 번에 하나의 항목 만 코드 변환되도록 대기열을 사용하십시오.
  2. 사용자에게 작은 파일을 요청하십시오
  3. 다음과 같은 방법으로 기계의 최대 마력을 사용하십시오.
    • 램 디스크에서 읽고 쓰기
    • 트랜스 코딩 작업을 위해 베어 메탈로 전환
    • 사용하다 -threads 0

어떤 작업을 수행하든 시간이 걸리기 때문에 사용자에게 트랜스 코딩 프로세스에 대한 정보를 제공하십시오. (IJTT)

[LordNeckbeard의 의견을 반영하기 위해 편집 된 명령]


10
옵션 배치가 중요합니다. 로 -threads입력하기 전에이 옵션 입력 (디코더)를 적용하고 있습니다. 일반적인 사용법은 ffmpeg [global options] [input options] -i input [output options] output입니다.
llogan

그렇다면 어디에 두시겠습니까? 처음에는 그것이 전 세계적으로 적용되고 있다고 생각 했습니까?
denjello

3
출력 옵션으로 인코딩 옵션이됩니다. 로 표시되는 옵션을 보려면 FFmpeg 설명서 를 참조하십시오 (global).
llogan

-threadsarg 앞뒤에 -iarg 를 넣는 것이 중요 합니까? 또한 얼마나 많은 스레드를 사용해야하는지 어떻게 결정해야합니까? 나는 기본적으로 그냥하고 있어요-c copy
chovy

3

이것은 조금 오래되었지만 도커와 같은 컨테이너의 완벽한 작업처럼 들립니다.

  • ffmpeg를 다음과 full horsepower같이 실행하십시오 (denjello라고 함).
  • 하지만 도커 내부에서 실행되도록하십시오.

이제 ffmpeg 명령 줄 옵션을 사용하지 않고도 단일 ffmpeg 인스턴스가 사용할 수있는 리소스 양을 제한 할 수 있습니다. CPU뿐만 아니라 메모리와 IO도 있습니다.

더 많은 것 : 백그라운드에서 실행할 수있는 다른 작업이 있고 시간이 걸리지 않고 빠르게 실행되는 작업이 있으므로 다른 작업에 가중치를 둘 수 있습니다.

https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources를 참조 하십시오.

github에는 미리 정의 된 ffmpeg 이미지가 있습니다 : https://github.com/jrottenberg/ffmpeg

docker run jrottenberg/ffmpeg \
        -i http://url/to/media.mp4 \
        -stats \
        $ffmpeg_options  - > out.mp4

오버 헤드로 인해 단일 변환이 느리게 실행될 수 있지만 여러 인스턴스를 동시에 실행하면 큰 이점이 있습니다. 각 작업이 기본 OS와 분리되어 있기 때문에 향상된 보안은 말할 것도없고 확장 성도 뛰어납니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.