Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Ffmpeg+php запуск списка сгенерированных задач
Новая тема
Ответить
цитата
26/12/12 в 11:49
Defolt
На сервере генерируется список вида:
/usr/local/bin/ffmpeg -i /home/sites/.../file.mp4 (параметры ffmpeg) /home/sites/.../file.mp4
...
cp /home/sites/.../file2.mp4 /home/sites/.../file2.mp4
...
Под windows, на локальной машине, записывал в файл *.cmd. Запустил, выполняется.
Каким образом это сделать на сервере с помощью php?
Запуск в цикле с помощью exec() выдает через ~5 минут 504 Gateway Timeout или что-то похожее.
цитата
26/12/12 в 11:56
Vyacheslav
Я не проффэсор в линуксе, но помоему аналог cmd в линуксе - это bash скрипт.
http://ru.wikipedia.org/wiki/Bash
цитата
26/12/12 в 12:00
Defolt
Я тоже
Но для этого надо заходить на сервер и запускать этот скрипт. Хотелось бы чтобы задача выполнялась из браузера.
цитата
26/12/12 в 12:57
Vyacheslav
Код:
<?php
echo "Starting ffmpeg...\n\n";
echo shell_exec("ffmpeg -i input.avi output.avi &");
echo "Done.\n";
?>
http://ffmpeg.org/trac/ffmpeg/wiki/Using%20FFmpeg%20from%20PHP%20scripts
цитата
26/12/12 в 13:06
Alexandur
Судя по:
Defolt писал:
выдает через ~5 минут 504 Gateway Timeout или что-то похожее
поставь в скрипте set_time_limit(0)
цитата
26/12/12 в 14:48
Mika
Или запусти процесс в фоновом режиме.
update: Vyacheslav как раз это и написал
Последний раз редактировалось: Mika (
26/12/12 в 14:49
), всего редактировалось 1 раз
цитата
26/12/12 в 14:48
idk2045
браузер для таких вещей не лучший вариант.. но как костыли сойдет)
по хорошему в браузере ты должен закидывать задания в очередь, а крон скрипт на серваке подхватывать их из очереди (базы).
цитата
26/12/12 в 15:34
Defolt
Vyacheslav писал:
Код:
<?php
echo "Starting ffmpeg...\n\n";
echo shell_exec("ffmpeg -i input.avi output.avi &");
echo "Done.\n";
?>
http://ffmpeg.org/trac/ffmpeg/wiki/Using%20FFmpeg%20from%20PHP%20scripts
Это для запуска команды. У меня запуск производится функцией exec(); Отличие shell_exec в выводе информации - массив или строка (если правильно нагуглил);
Код:
$command = "/usr/local/bin/ffmpeg -i /home/sites/.../file.mp4 (параметры ffmpeg) /home/sites/.../file.mp4"." 2>&1";
exec($command,$output,$status);
gimcnuk писал:
поставь в скрипте set_time_limit(0)
Не работает
Поставил set_time_limit(0); Перед exec();
Mika писал:
Или запусти процесс в фоновом режиме.
update: Vyacheslav как раз это и написал
Проверил список процессов на сервере. Как оказалось, браузер через 5 минут выдал 504 ошибку, а на сервере продолжают выполняться команды ffmpeg. B конечном итоге все задачи выполнены.
grozny писал:
браузер для таких вещей не лучший вариант.. но как костыли сойдет)
по хорошему в браузере ты должен закидывать задания в очередь, а крон скрипт на серваке подхватывать их из очереди (базы).
Как это сделать, можно похожий пример? В какую сторону "копать".
Можно ли так сделать: после отправки списка на выполнение, через время захожу на страницу, а она мне выдает готово или нет?
цитата
26/12/12 в 15:40
Alexandur
Добавь в цикл ob_flush() и flush()
http://php.net/manual/ru/function.flush.php
- примеры внизу
цитата
26/12/12 в 16:01
Mika
Defolt писал:
Проверил список процессов на сервере. Как оказалось, браузер через 5 минут выдал 504 ошибку, а на сервере продолжают выполняться команды ffmpeg. B конечном итоге все задачи выполнены.
Я же сказал: в фоне запускай процесс. То, что у тебя на конце стоит 2>&1, означает stderr в stdout выводить. Для того, чтобы в фоне запустить, надо & в конце добавить, что и сделано в примере Vyacheslav'а.
цитата
26/12/12 в 17:06
Defolt
gimcnuk писал:
Добавь в цикл ob_flush() и flush()
http://php.net/manual/ru/function.flush.php
- примеры внизу
Спасибо, помогло. В конечном итоге браузер вывел данные, а не 504 ошибку.
Mika писал:
Я же сказал: в фоне запускай процесс. То, что у тебя на конце стоит 2>&1, означает stderr в stdout выводить. Для того, чтобы в фоне запустить, надо & в конце добавить, что и сделано в примере Vyacheslav'а.
2>&1 выдаст ошибку в переменную $status.
& - задача будет выполнена в фоне и не выдаст результатов.
Объясни плиз для тех кто в танке, а то не догоняю что к чему и как будет работать
цитата
26/12/12 в 17:58
Mika
Defolt писал:
2>&1 выдаст ошибку в переменную $status.
Инструкция "2>&1" означает перенаправление потока stderr в поток stdout. А переменная $status, согласно мануалу по
exec
"будет содержать статус завершения внешней программы".
Defolt писал:
& - задача будет выполнена в фоне и не выдаст результатов.
А разве выполнение задачи не является для тебя главным результатом?
Если ты не будешь запускать задачу в фоне, то при остановке php-скрипта (например, при закрытии браузера), задача твоя тоже убьется, так что сам решай, что для тебя важнее.
цитата
26/12/12 в 18:10
Defolt
Mika писал:
А разве выполнение задачи не является для тебя главным результатом?
Если ты не будешь запускать задачу в фоне, то при остановке php-скрипта (например, при закрытии браузера), задача твоя тоже убьется, так что сам решай, что для тебя важнее.
Теперь ясно для чего нужен &.
Спасибо всем ответившим. Вопрос решен, главный результат достигнут - работает
Новая тема
Ответить
Эта страница в полной версии