2012-01-22 14 views
9

Mam ffmpeg konwersję wideo w pliku PHP i działa tak, jak powinna. Problem polega na tym, że kończy się to na minutę. Pomyślałem, że może to być łatwe do zrobienia, ale mogę tylko to, aby pracować w tle, gdy używam tylko jedno polecenie (np pojedynczy konwersji przejść bez mp4box) jak toJak uruchomić powłokę exec w tle, gdy php kontynuuje

exec("nohup " . $ffmpegPath . " -i " . $srcFile . " -f mp4 -vcodec libx264 -crf 27 -s " . $srcWidth . "x" . $srcHeight . " -an -r 20 " . $destFile . ".mp4 > /dev/null 2>&1 &"); 

Problem polega na tym, że trzeba użyć trzech różne polecenia, aby wykonać odpowiednią konwersję. Do tej pory moje polecenia wyglądać w pliku PHP i to działa, ale z ogromnym opóźnieniem:

exec($ffmpegPath . " -y -i " . $srcFile . " -f mp4 -pass 1 -passlogfile " . $video_pass_log . " -vcodec libx264 -vpre ipod640 -b:v 2M -bt 4M -an " . $destFile . ".mp4"); 
exec($ffmpegPath . " -y -i " . $srcFile . " -f mp4 -pass 2 -passlogfile " . $video_pass_log . " -vcodec libx264 -vpre ipod640 -b:v 2M -bt 4M -acodec libfaac -ac 2 -ar 44100 -ab 96k " . $destFile . ".mp4"); 
exec($mp4boxpath . " -tmp /tmp -hint " . $destFile . ".mp4"); 

Jak mogę dokonać bieg exec powłoki w tle podczas PHP trwa?

Odpowiedz

24

Zobacz Is there a way to use shell_exec without waiting for the command to complete?

Dodawanie > /dev/null 2>/dev/null & usunie wyjścia i uruchamia komendę w innym procesie (the & tworzy nowy proces, > i 2> przekierowuje wyjście normalne i błędów)

+1

Dzięki za to, to post pomógł także w rozwiązaniu problemu http://stackoverflow.com/questions/6402658/php-shell-exec-multiple-commands-at-once-in-background. Wygląda na to, że potrzebowałem połączyć wszystkie trzy komendy za pomocą &&, a następnie zawinąć całą rzecz w nawiasach przed przekierowaniem wyjścia. –

+0

+1 dla wyjaśnienia, co każda część rozwiązania ma, nie widziałem podobnych odpowiedzi na podobne pytania. – AntonChanning