[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ffmpeg, exec(), shell_exec()
zeromind
Работаю на сервере с ffmpeg'om + qt-faststart, алгоритм работы примерно таков:
1 - постом заливается файл
2 - переношу его мув_аплодед_файлс в свою директорию
3 - делаю скриншот
4 - выполняю command вот так (конвертирование файла):
exec('ffmpeg -i ' . $filename . ' -f mp4 -b 512k -vcodec libx264 -vpre faster -acodec libfaac -ar 44100 -ab 96k -threads 2 ' . $filetmp . ' && qt-faststart ' . $filetmp . ' ' . $filenew);

и после делаю
unlink($filename);
unlink($filetmp);


1) вопрос: что произойдет? exec не будет же дожидатся окончания операции shell ? если нет, тогда получается удалятся нижние 2 файла? которые используются в кодировании..

меня инетерсует, как дождатся полного окончания выполнения операции exec() (пока есть идея, сделать цикл и ждать пока вернется true, на сколько я помню это 2ой не обязательный аргумент exec() ?)

2) знаю что с помощью shell_exec() можно возвращать инфу с терминала..
для примера:
echo shell_exec('ffmpeg -i /home/zeromind/www/uploads/videos/6/eCiS0A5dNW.flv 2>&1');

возвращает всё ок, можно ли как то похожим методом возвращать прогресс конвертирования файла, который обновляется в терминале.. ?
в очень старой статье был приведен примерно следующее решение:
ffmpeg -y -i input.avi -vcodec xvid -acodec mp3 -ab 96 output.avi &> output.txt

т.е. записывает инфу в файл, потом её же получается читаем, и можно расчитать "примерное" время окончание операции.. есть ли идеи насчет этого ? )



Спустя 40 минут, 41 секунда (25.02.2012 - 19:34) killer8080 написал(а):
Цитата (zeromind @ 25.02.2012 - 17:53)
1) вопрос: что произойдет? exec не будет же дожидатся окончания операции shell ?

вообще то должна дождаться, если только вывод не был перенаправлен в файл
Цитата (zeromind @ 25.02.2012 - 17:53)
если нет, тогда получается удалятся нижние 2 файла? которые используются в кодировании..

если файлы будут в процессе обработке, ffmpeg их залочит, и php не сможет их удалить
Цитата (zeromind @ 25.02.2012 - 17:53)
возвращает всё ок, можно ли как то похожим методом возвращать прогресс конвертирования файла, который обновляется в терминале.. ?

вывод вернуть можно, только вернется он когда отработает консольная команда, прогресс отслеживать не получится.

Спустя 6 минут, 55 секунд (25.02.2012 - 19:41) zeromind написал(а):
Цитата (killer8080 @ 25.02.2012 - 19:34)
Цитата (zeromind @ 25.02.2012 - 17:53)
1) вопрос: что произойдет? exec не будет же дожидатся окончания операции shell ?

вообще то должна дождаться, если только вывод не был перенаправлен в файл
Цитата (zeromind @ 25.02.2012 - 17:53)
если нет, тогда получается удалятся нижние 2 файла? которые используются в кодировании..

если файлы будут в процессе обработке, ffmpeg их залочит, и php не сможет их удалить
Цитата (zeromind @ 25.02.2012 - 17:53)
возвращает всё ок, можно ли как то похожим методом возвращать прогресс конвертирования файла, который обновляется в терминале.. ?

вывод вернуть можно, только вернется он когда отработает консольная команда, прогресс отслеживать не получится.

протупил, сейчас проверил заново, exec() ждет окончания операции..

насчет прогресса: каким способом на ютубе том же реализован прогресс бар конвертирования файла? )
вот есть сервис (не реклама), там впринципе так же как и на ютубе (ajax'om обновляются процентики и заполняется бар)

Спустя 8 минут, 7 секунд (25.02.2012 - 19:49) killer8080 написал(а):
Цитата (zeromind @ 25.02.2012 - 18:41)
насчет прогресса: каким способом на ютубе том же реализован прогресс бар конвертирования файла? )

Не знаю. Наверно вывод перенаправляется в файл, затем аяксом через интервалы делается запрос к скрипту который парсит отчет из файла, но это лишь предположение.

Спустя 2 минуты, 11 секунд (25.02.2012 - 19:51) zeromind написал(а):
когда конвертируется файл, в терминале одна и та же строка обновляется пару раз в секунду(кол-во кадров пройденных, битрейт, сколько времени файла пройдено), мб всё таки shell_exec сразу будет возвращать данные?

Спустя 3 минуты, 53 секунды (25.02.2012 - 19:55) killer8080 написал(а):
Цитата (zeromind @ 25.02.2012 - 18:51)
мб всё таки shell_exec сразу будет возвращать данные?

Не будет, вывод вернет только по окончании работы команды.
Можешь конечно по экспериментировать. smile.gif

Спустя 14 минут, 50 секунд (25.02.2012 - 20:10) killer8080 написал(а):
zeromind
попробуй все таки перенаправить вывод в файл. Посмотри будет ли он доступен на чтение, в процессе конвертации.

Спустя 9 минут, 35 секунд (25.02.2012 - 20:19) zeromind написал(а):
killer8080
output.txt совсем пустой оказался 0 байт,

exec('ffmpeg -i ' . $filename . ' -f mp4 -b 512k -vcodec libx264 -vpre faster -acodec libfaac -ar 44100 -ab 96k -threads 2 ' . $filetmp . ' &> ' . ROOT . 'output.txt && qt-faststart ' . $filetmp . ' ' . $filenew);

вроде бы всё правильно же?

add:
        exec('ffmpeg -i ' . $filename . ' -f mp4 -b 512k -vcodec libx264 -vpre faster -acodec libfaac -ar 44100 -ab 96k -threads 2 ' . $filetmp . ' &> ' . ROOT . 'output.txt && qt-faststart ' . $filetmp . ' ' . $filenew);

unlink($filename);
unlink($filetmp);


теперь даже конечного $filenew нету, ошибка) где то тут $filetmp . ' &> ' . ROOT . 'output.txt, хотя файл создается, но пустой!

Спустя 4 минуты, 6 секунд (25.02.2012 - 20:23) killer8080 написал(а):
zeromind
может попробовать команды ffmpeg и qt-faststart выполнить по отдельности?

Спустя 54 секунды (25.02.2012 - 20:24) zeromind написал(а):
Цитата (killer8080 @ 25.02.2012 - 20:23)
zeromind
может попробовать команды ffmpeg и qt-faststart выполнить по отдельности?

щяс так и сделаю)

Спустя 1 минута, 11 секунд (25.02.2012 - 20:26) killer8080 написал(а):
и главное
Цитата (killer8080 @ 25.02.2012 - 19:10)
Посмотри будет ли он доступен на чтение, в процессе конвертации.


Спустя 6 минут, 41 секунда (25.02.2012 - 20:32) zeromind написал(а):
Цитата (killer8080 @ 25.02.2012 - 20:26)
и главное
Цитата (killer8080 @ 25.02.2012 - 19:10)
Посмотри будет ли он доступен на чтение, в процессе конвертации.

я в реальном времени, через sftp смотрю корень сайта, файл output.txt 0 байт, скачать и помотреть его можно, но он пустой)),
наверно надо команду писать как shell_exec() вместо exec() ? щяс попробую..

Спустя 5 минут, 41 секунда (25.02.2012 - 20:38) killer8080 написал(а):
zeromind
shell_exec() то же самое, что и кавычки ``
думаю разницы никакой не будет с exec()

Спустя 2 минуты, 36 секунд (25.02.2012 - 20:40) zeromind написал(а):
и в чем может быть проблема? тут брал инфу, щяс ещё погуглю, как правильно записать инфу в файл )

Спустя 28 минут, 56 секунд (25.02.2012 - 21:09) killer8080 написал(а):
Цитата (zeromind @ 25.02.2012 - 19:32)
я в реальном времени, через sftp смотрю корень сайта, файл output.txt 0 байт

а конвертация при этом происходит? Может ошибка какая?

Спустя 4 минуты, 47 секунд (25.02.2012 - 21:14) zeromind написал(а):
происходит!

интересная статья!
там же нашел готовый вариант (сейчас качаю) - http://sourceforge.net/projects/ffmpegprogress/

Features

Show the Converting Progress from FFMPEG
Using PHP, JavaScript, Ajax and MySQL
Using the getID3 Libary
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.