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.