몇 개의 FFmpeg 명령 인스턴스를 병렬로 실행할 수 있습니까?


18

CPU를 완전히 활용하고 비디오 변환 속도를 높이기 위해 8 개의 명령을 병렬로 실행하는 데 피곤했습니다.

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/b.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/c.mp4 > /dev/null 2>&1  &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/d.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/e.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/f.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60  -f mp4 /mnt/g.mp4 > /dev/null 2>&1 &
ffmpeg -i input.mp4 -t 60 -f mp4  /mnt/h.mp4 > /dev/null 2>&1 &

그들 중 2 ~ 3 명이 멈췄다. 왜 이런 일이 발생합니까? 이것이 FFmpeg 제한입니까? 16 코어 및 4 코어 머신 EC2 c1.xlarge 및 cc2.8xlarge에서 이것을 시도했습니다. 같은 행동입니다. 나는 복잡한 명령과 간단한 명령을 시도했지만 여전히 2 또는 3이 중단되었습니다.


3
내 지식으로는 FFmpeg 자체로는 당신을 방해하지 않아야합니다. 쉘 문제 일 수 있습니까?
slhck

각 명령에 다른 입력이 있으면 어떻게합니까? 그들이 멈 추면 모두 멈추기 때문에 어떻게 독립적으로 만들 수 있습니까?
Samson

다중 프로세서 사용에 대한 매개 변수를 찾았습니까?
Dr.jacky

여기서 "중지"란 무슨 뜻입니까? bash는 일시 중지 된 것으로 표시합니까?
rogerdpack

답변:


21

원래 작업에 응답하여 일부 작업이 중지되는 이유에 대해 명령 행의 ffmpeg는 대화식입니다. 명령 행에서 지속적으로 입력을 읽고 있습니다. 백그라운드에서 모든 항목을 실행하려면 다음을 변경해야합니다.

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 > /dev/null 2>&1 &

이에:

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 </dev/null > /dev/null 2>&1 &

추가하면 </dev/nullffmpeg가 입력을 찾지 않도록 지시하며 모든 작업이 백그라운드에서 실행되어야합니다.


1
이게 뭐예요 : 2> & 1
Dr.jacky

대단히 감사합니다! 나는 똑같은 문제를 겪었고 이것은 매력처럼 작용했습니다.
fr_andres SupportsMonicaCellio 2016

3
@ Mr.Hyde 내가 알고있는 파티에 늦었지만 2> & 1은 오류 스트림이 스타우트 스트림과 같은 위치로 이동하도록 지시합니다. / dev / null. 에 대한 속기입니다 > /dev/null 2>/dev/null.
berry120

7

한 가지 명령으로 기계를 망치는 훨씬 쉬운 방법은 모든 것을 한 줄로 연결하는 것입니다.

ffmpeg -i input.mp4 -t 60 -f mp4 /mnt/a.mp4 \
 -f mp4 /mnt/b.mp4 \
 -f mp4 /mnt/c.mp4 \
 -f mp4 /mnt/d.mp4 \
 -f mp4 /mnt/e.mp4 \
 -f mp4 /mnt/f.mp4 \
 -f mp4 /mnt/g.mp4 \
 -f mp4  /mnt/h.mp4 > /dev/null 2>&1

서버에 사용 가능한 모든 프로세서를 사용하도록 알리는 플래그를 ffmpeg 버전에 따라 추가 할 수 있습니다.

-threads 0

참조 : http://ffmpeg.org/trac/ffmpeg/wiki/Creating%20multiple%20outputs


나는 이것을 시도했지만 모든 프로세서를 효율적으로 사용하지는 않습니다. 로드는 20-30 %로 유지되며 하이퍼 스레드는 전혀 사용되지 않습니다.
d33pika 2013

2
어쩌면 EC2 머신과 관련이 있습니까? 16 개의 출력을 가진 16 개의 xeon 코어 머신에서 위의 명령을 실행하면 다음과 같은 결과를 얻습니다. htop screenshot
NublaII

FFmpeg의 최신 버전을 사용하고 있습니까?
d33pika 2

@NublaII> / dev / null 2> & 1!은 무엇입니까?
Dr.jacky

1
@ Mr.Hyde 표준 출력을 숨기고 오류 출력을 표시합니다. 이것을 읽으십시오 : xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
Yuri Sucupira
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.