2012-10-02 14 views
3

내 서버에서 많은 비디오를 인코딩하려고하지만 FFMPEG는 리소스를 많이 사용하므로 어떤 형태의 큐를 설정하고 싶습니다. 내 사이트의 나머지 부분은 PHP를 사용하고 있지만 PHP, Python, BASH 등을 사용해야할지 모르겠다. CRON을 사용해야 할 수도 있다고 생각했지만 실제로 ffmpeg를 시작하는 방법을 정확히 알지는 못했다. 새 작업 (목록에서)이 끝나고 새 작업을 완료합니다.ffmpeg 대기열을 어떻게 설정합니까?

답변

7

우리는 bash 스크립트에서 FIFO (First In First Out)을 사용합니다. 스크립트는이 스크립트에 ffmpeg 명령을 보낼 수 (또는 스크립트 FIFO를 호출 어떤 터미널) cron하기 전에 실행해야합니다 : 이제

#!/bin/bash 

pipe=/tmp/ffmpeg 

trap "rm -f $pipe" EXIT 

# creating the FIFO  
[[ -p $pipe ]] || mkfifo $pipe 

while true; do 
    # can't just use "while read line" if we 
    # want this script to continue running. 
    read line < $pipe 

    # now implementing a bit of security, 
    # feel free to improve it. 
    # we ensure that the command is a ffmpeg one. 
    [[ $line =~ ^ffmpeg ]] && bash <<< "$line" 
done 

(스크립트가 실행 중일 때), 우리는 어떤 ffmpeg 명령을 보낼 수 있습니다

echo "ffmpeg -version" > /tmp/ffmpeg 

그리고 오류 검사와 : 구문을 사용하여 명명 된 파이프는

if [[ -p /tmp/ffmpeg ]]; then 
    echo "ffmpeg -version" > /tmp/ffmpeg 
else 
    echo >&2 "ffmpeg FIFO isn't open :/" 
fi 

그들은 것 자동 큐잉.

+0

예, 동영상이 동적으로 추가됩니다. 그래서 나는 그들을 개종시키기를 원하지 않는다. 서버에 새 비디오가 다운로드되면 비디오를 대기열에 추가하려고합니다. –

+0

POST가 필요에 맞게 처음부터 다시 작성됩니다. –

+0

아름다운 나는 집에 갈 때 이것을 시도 할 것이다 –

1

감사합니다. ffmpeg 큐를 생성하기 위해이 기술을 정확히 적용했습니다. 나는 1 개의 작은 변화를 만들었다. 어떤 이유로이 대기열은 2 개 항목에 대해서만 작동했습니다. 첫 번째 항목이 끝나면 세 번째 항목 만 보낼 수있었습니다.

나는 그에 따라 스크립트를 수정 :
while true; do 

# added tweak to fix hang 
exec 3<> $pipe 

# can't just use "while read line" if we 
# want this script to continue running. 
read line < $pipe 

나는 이것을 기반으로 : https://stackoverflow.com/questions/15376562/cant-write-to-named-pipe

그냥이의 향후 사용을 위해이 공유해야한다고 생각.

+0

흠,이 질문은 StardustOne의 훌륭한 답변에 대한 의견이었습니다. – Joost

관련 문제