конвертировать с использованием ffmpeg без exec

У меня Windows XP, Apache, PHP 5.3 и ffmpeg работают нормально. Мне нужно преобразовать flv в avi или наоборот без использования команды exec(). Это возможно?

Спасибо.

edit: я надеюсь, что кто-то сможет отредактировать исходный код ffmpeg и реализовать функцию exec в расширении php, чтобы мы могли просто добавить параметры в функцию (например, $ fmpeg-> exec ('exec parameters here');), чтобы выполнить exec прямо с расширения ...

и скомпилируйте этот файл: p


person Rami Dabain    schedule 13.11.2010    source источник
comment
Не совсем ответ, поэтому я опубликую здесь: индивидуальное расширение PHP, которое будет делать то, что вам нужно, может быть решением   -  person Chris Ghenea    schedule 27.12.2010
comment
есть опыт программирования? (компьютер, а не Интернет)   -  person Chris Ghenea    schedule 27.12.2010


Ответы (8)


Это невозможно, по крайней мере, не видно примера, где ffmpeg работает без какого-либо системного вызова (например, exec, system) из PHP.

Изменить: один из вариантов - использовать ужасный safe_mode. См. руководство на exec:

Примечание. Когда включен безопасный режим, вы можете выполнять только файлы в каталоге safe_mode_exec_dir. ...

Теоретически вы можете поместить двоичный файл ffmpeg в произвольный каталог и указать путь к этому каталогу в safe_mode_exec_dir. Таким образом, пользователи смогут запускать исполняемые файлы только в этом каталоге. Но вы должны попытаться увидеть последствия такой установки в реальной жизни ...

Что касается вашего запроса на расширение PHP: расширение PHP ffmpeg является просто информационным. Если вам нужен тот, который может что-то делать с реальными файлами, вам нужно будет создать новое расширение на основе библиотеки ffmpeg.

И если вы планируете делать это на виртуальном хостинге, вам, скорее всего, не повезло. Стандартный провайдер виртуального хостинга не может предоставить такие функции видео. Для хостинга и обработки видео в лучшем случае требуется специализированный хостинг.

person Halil Özgür    schedule 27.12.2010
comment
У меня есть выделенные серверы, и я хочу, чтобы мои клиенты могли использовать ffmpeg без необходимости включать exec или системные функции :) - person Rami Dabain; 27.12.2010
comment
ну, у меня тоже есть Windows-серверы, на этом он будет работать !? - person Rami Dabain; 27.12.2010
comment
Кажется так. См. Комментарий к руководству: php.net/manual/en /features.safe-mode.php#40870 - person Halil Özgür; 28.12.2010

Есть версия ffmpeg для PHP:

http://ffmpeg-php.sourceforge.net/

person Evan Mulawski    schedule 13.11.2010
comment
У меня уже установлен ffmpeg как расширение для PHP, просто в документации ничего не говорится о преобразовании, только о получении материала, моим клиентам запрещено использовать команду exec, поэтому мне нужен метод для преобразования видео напрямую из php без использования exec внутри код . - person Rami Dabain; 13.11.2010
comment
Поскольку ffmpeg - это скомпилированный двоичный файл, нет способа (с помощью ffmpeg) управлять файлами без использования exec. В каждом руководстве используется exec: vexxhost.com/blog/2007/05/20/ - person Evan Mulawski; 13.11.2010
comment
Кроме того, почему вашим клиентам запрещено использовать exec? - person Evan Mulawski; 13.11.2010
comment
Возможно виртуальный хостинг. Вашим клиентам не стоит даже ДУМАТЬ о перекодировании фильмов на виртуальных хостингах. Это просто грубость по отношению к другим клиентам на сервере, поскольку для перекодирования требуется много вычислительной мощности. - person ThiefMaster; 13.11.2010
comment
Это не только грубо, но и аннулирование их аккаунтов практически гарантировано. - person ceejayoz; 13.11.2010
comment
Я провайдер общего хоста, у каждого сервера 2 клиента, я не хочу, чтобы они использовали exec, но я хочу, чтобы он использовал ffmpeg :). - person Rami Dabain; 14.11.2010
comment
@Evan Mulawski, Насколько я понимаю, если вы создадите FFMPEG самостоятельно, вам не придется беспокоиться об авторских правах / проблемах с патентами на кодеки. Проблема возникает с распространением двоичных файлов. Разве это не так? Или вы имели в виду возможное использование FFMPEG для кодирования материалов, защищенных авторским правом ... что, уверяю вас, это отдельная проблема. - person Brad; 14.11.2010
comment
@Brad: Я имел в виду кодирование / декодирование материалов, защищенных авторским правом, и то, как они могут распространяться. - person Evan Mulawski; 14.11.2010
comment
это не защищенный авторским правом материал, у меня есть новостной сайт, я хочу, чтобы писатели могли загружать свои СОБСТВЕННЫЕ видео, которые они записали с помощью мобильных телефонов (3gp) или камер (mp4 и др.), а затем эти видео были преобразованы в flv и отображены на сайт с помощью флеш-видео плеера. мои клиенты (2) находятся на одном сервере, который я запускаю, я не хочу, чтобы они использовали exec для взлома друг друга ... вот и все :) - person Rami Dabain; 20.11.2010
comment
@Ronan на машине с правильно настроенными разрешениями, разрешить exec() не должно быть проблемой. - person Pekka; 28.12.2010

Если вы не хотите использовать exec () на веб-сервере по соображениям безопасности и видео не нужно конвертировать в "реальном времени", вы можете использовать unix-подобную задачу cron для Windows, создать php-скрипт и использовать PHP-интерпретатор.

http://www.makeuseof.com/tag/bring-linux-cron-like-power-to-windows/ или http://www.visualcron.com/

а) Пользователь загружает видео, и это видео сохраняется во временном каталоге. Видео получает идентификатор и временную метку, которые сохраняются в базе данных.

б) Каждые 15 минут вызывается независимый от веб-сервера скрипт php, файл jar или исполняемый файл c # для создания команды ffmpeg и необходимых параметров. Затем файл конвертируется, перемещается в «преобразованную» папку, исходный файл удаляется или перемещается в «архивную» папку, а база данных обновляется.

person chris    schedule 28.12.2010

http://ffencoderd.sourceforge.net/index.html

Используя очередь заданий и связь на основе XML, видео можно отправлять в кодированном виде.

Для меня это похоже на план.

person chx    schedule 28.12.2010

Вам нужно будет где-то выполнить exec. Если вы не можете сделать это на своем главном компьютере, другое решение - загрузить другую систему, преобразовать ее, а затем загрузить преобразованное видео и повторить. Более идеальным решением будет публикация в другом онлайн-аккаунте, конвертация и загрузка. Среди этих вариантов первый будет масштабируемым.

Насколько мне известно, ни одно из этих решений не готово к использованию. Их нужно будет создать.

Я считаю, что причина, по которой формат не обрабатывается в открытом PHP или Perl, связана с потенциальными проблемами лицензирования. FLV не является форматом с открытым исходным кодом. Таким образом, фреймворки perl и php делают запрос exec для обработки видео с помощью ffmpeg.

person Wayne    schedule 28.12.2010

Другой вариант - использовать Сухосин. Тогда вы могли бы хотя бы ограничить, откуда именно может исходить системный вызов, и, в свою очередь, ограничить доступ к этому каталогу.

Вот базовый пример конфигурации vhost.conf, где shell_exec заблокирован везде в вашем домене, кроме папки ffmpeg, использующей Suhosin

<virtualhost *:80>
ServerName your.server
DocumentRoot "/var/your/public_html"
php_admin_value suhosin.executor.func.blacklist "shell_exec, passthru, show_source, system, pcntl_exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, exec"

<Directory "/var/your/public_html/ffmpeg-folder">
php_admin_value suhosin.executor.func.blacklist "passthru, show_source, system, pcntl_exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, exec"
</Directory>
</virtualhost>
person d3c0y    schedule 17.11.2013

Попробуйте использовать pclose(popen($cmd, 'r')); вместо exec ()

person Anatolii Dev    schedule 26.04.2017

Возможно, вы можете подключиться к ssh на php и выполнять там команды.

person Codler    schedule 23.12.2010