конвертировать используя ffmpeg без exec - PullRequest
2 голосов
/ 13 ноября 2010

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

Спасибо.

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

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

Ответы [ 8 ]

3 голосов
/ 27 декабря 2010

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

Редактировать: одна опция используетстрашно safe_mode.См. Руководство по exec:

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

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

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

И если вы планируете сделать это на виртуальном хостинге, скорее всего, вы вышлиудачиПоставщик общего хостинга стандартной проблемы не обеспечит такую ​​функциональность видео.Хостинг и обработка видео в лучшем случае требуют специализированного хостинга.

3 голосов
/ 13 ноября 2010

Существует версия ffmpeg для PHP:

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

2 голосов
/ 28 декабря 2010

Если вы не хотите использовать exec () на веб-сервере из соображений безопасности и видео не нужно конвертировать в «реальном времени», вы можете использовать unix-подобный cronjob для окон, создать phpскрипт и используйте php-интерпретатор.

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

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

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

1 голос
/ 28 декабря 2010

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

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

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

0 голосов
/ 26 апреля 2017

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

0 голосов
/ 17 ноября 2013

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

Вот базовый пример конфигурации 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>
0 голосов
/ 29 декабря 2010

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

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

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

0 голосов
/ 23 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...