Реклама на сайте Advertise with us

Ffmpeg+php запуск списка сгенерированных задач

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 17.01.06
Сообщения: 146
Рейтинг: 197

Ссылка на сообщениеДобавлено: 26/12/12 в 11:49       Ответить с цитатойцитата 

На сервере генерируется список вида:
/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 или что-то похожее.

0
 

нет судьбы

С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204


Передовик Master-X (16.07.2011) Передовик Master-X (16.10.2011) Передовик Master-X (01.11.2011) Передовик Master-X (16.11.2011) Передовик Master-X (01.01.2012) Ветеран трепа Master-X (16.02.2012)
Ссылка на сообщениеДобавлено: 26/12/12 в 11:56       Ответить с цитатойцитата 

Я не проффэсор в линуксе, но помоему аналог cmd в линуксе - это bash скрипт.
http://ru.wikipedia.org/wiki/Bash

®

4
 



С нами с 17.01.06
Сообщения: 146
Рейтинг: 197

Ссылка на сообщениеДобавлено: 26/12/12 в 12:00       Ответить с цитатойцитата 


Я тоже icon_wink.gif
Но для этого надо заходить на сервер и запускать этот скрипт. Хотелось бы чтобы задача выполнялась из браузера.

0
 

нет судьбы

С нами с 27.03.03
Сообщения: 4427
Рейтинг: 4204


Передовик Master-X (16.07.2011) Передовик Master-X (16.10.2011) Передовик Master-X (01.11.2011) Передовик Master-X (16.11.2011) Передовик Master-X (01.01.2012) Ветеран трепа Master-X (16.02.2012)
Ссылка на сообщениеДобавлено: 26/12/12 в 12:57       Ответить с цитатойцитата 

Код:
<?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

®

4
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 26/12/12 в 13:06       Ответить с цитатойцитата 

Судя по:
Defolt писал:
выдает через ~5 минут 504 Gateway Timeout или что-то похожее

поставь в скрипте set_time_limit(0)

6
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 26/12/12 в 14:48       Ответить с цитатойцитата 

Или запусти процесс в фоновом режиме.
update: Vyacheslav как раз это и написал

Последний раз редактировалось: Mika (26/12/12 в 14:49), всего редактировалось 1 раз

4
 



С нами с 27.09.03
Сообщения: 5454
Рейтинг: 2506

Ссылка на сообщениеДобавлено: 26/12/12 в 14:48       Ответить с цитатойцитата 

браузер для таких вещей не лучший вариант.. но как костыли сойдет)
по хорошему в браузере ты должен закидывать задания в очередь, а крон скрипт на серваке подхватывать их из очереди (базы).

4
 



С нами с 17.01.06
Сообщения: 146
Рейтинг: 197

Ссылка на сообщениеДобавлено: 26/12/12 в 15:34       Ответить с цитатойцитата 

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)

Не работает icon_sad.gif Поставил set_time_limit(0); Перед exec();

Mika писал:
Или запусти процесс в фоновом режиме.
update: Vyacheslav как раз это и написал

Проверил список процессов на сервере. Как оказалось, браузер через 5 минут выдал 504 ошибку, а на сервере продолжают выполняться команды ffmpeg. B конечном итоге все задачи выполнены.
grozny писал:
браузер для таких вещей не лучший вариант.. но как костыли сойдет)
по хорошему в браузере ты должен закидывать задания в очередь, а крон скрипт на серваке подхватывать их из очереди (базы).

Как это сделать, можно похожий пример? В какую сторону "копать".
Можно ли так сделать: после отправки списка на выполнение, через время захожу на страницу, а она мне выдает готово или нет?

0
 



С нами с 01.04.07
Сообщения: 4378
Рейтинг: 2970

Ссылка на сообщениеДобавлено: 26/12/12 в 15:40       Ответить с цитатойцитата 

Добавь в цикл ob_flush() и flush()
http://php.net/manual/ru/function.flush.php - примеры внизу

4
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 26/12/12 в 16:01       Ответить с цитатойцитата 

Defolt писал:
Проверил список процессов на сервере. Как оказалось, браузер через 5 минут выдал 504 ошибку, а на сервере продолжают выполняться команды ffmpeg. B конечном итоге все задачи выполнены.

Я же сказал: в фоне запускай процесс. То, что у тебя на конце стоит 2>&1, означает stderr в stdout выводить. Для того, чтобы в фоне запустить, надо & в конце добавить, что и сделано в примере Vyacheslav'а.

4
 



С нами с 17.01.06
Сообщения: 146
Рейтинг: 197

Ссылка на сообщениеДобавлено: 26/12/12 в 17:06       Ответить с цитатойцитата 

gimcnuk писал:
Добавь в цикл ob_flush() и flush()
http://php.net/manual/ru/function.flush.php - примеры внизу

Спасибо, помогло. В конечном итоге браузер вывел данные, а не 504 ошибку.

Mika писал:
Я же сказал: в фоне запускай процесс. То, что у тебя на конце стоит 2>&1, означает stderr в stdout выводить. Для того, чтобы в фоне запустить, надо & в конце добавить, что и сделано в примере Vyacheslav'а.

2>&1 выдаст ошибку в переменную $status.
& - задача будет выполнена в фоне и не выдаст результатов.
Объясни плиз для тех кто в танке, а то не догоняю что к чему и как будет работать

0
 



С нами с 18.10.02
Сообщения: 4165
Рейтинг: 3365

Ссылка на сообщениеДобавлено: 26/12/12 в 17:58       Ответить с цитатойцитата 

Defolt писал:
2>&1 выдаст ошибку в переменную $status.

Инструкция "2>&1" означает перенаправление потока stderr в поток stdout. А переменная $status, согласно мануалу по exec "будет содержать статус завершения внешней программы".

Defolt писал:
& - задача будет выполнена в фоне и не выдаст результатов.

А разве выполнение задачи не является для тебя главным результатом?
Если ты не будешь запускать задачу в фоне, то при остановке php-скрипта (например, при закрытии браузера), задача твоя тоже убьется, так что сам решай, что для тебя важнее.

4
 



С нами с 17.01.06
Сообщения: 146
Рейтинг: 197

Ссылка на сообщениеДобавлено: 26/12/12 в 18:10       Ответить с цитатойцитата 

Mika писал:
А разве выполнение задачи не является для тебя главным результатом?
Если ты не будешь запускать задачу в фоне, то при остановке php-скрипта (например, при закрытии браузера), задача твоя тоже убьется, так что сам решай, что для тебя важнее.

Теперь ясно для чего нужен &.

Спасибо всем ответившим. Вопрос решен, главный результат достигнут - работает icon_smile.gif

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »