преобразование из mp3 в ogg с помощью php

Я хочу преобразовать файл mp3 в ogg. Я попробовал следующий код

exec("/usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbis testjohn4545454.ogg",$output);
var_dump($output);

Но он не конвертирует файл и возвращает только array(0) { }, и это занимает немного времени на выполнение.

Но преобразование выполняется успешно при использовании команды ssh.

Пожалуйста, дайте мне решение.


person Preethy    schedule 19.02.2013    source источник
comment
Трудно дать немедленное решение, вы дали PHP приличное время выполнения, чтобы завершить его успешно? переменная set_time_limit.   -  person Heap    schedule 19.02.2013
comment
@Heapy Требуется совсем немного времени на выполнение.   -  person Preethy    schedule 19.02.2013
comment
У пользователя веб-сервера может не хватить разрешений, вы их проверяли?   -  person Heap    schedule 19.02.2013
comment
@Heapy Да, я поставил 777 для всех файлов, но он остается прежним.   -  person Preethy    schedule 19.02.2013
comment
@Heapy Но это работает при использовании команды SSH   -  person Preethy    schedule 19.02.2013
comment
возможно, вы также захотите попробовать абсолютные URL-адреса на случай, если он попытается загрузить файл из другого каталога.   -  person Jamie Taylor    schedule 19.02.2013


Ответы (4)


Забавно, что вы хотите выполнить это в своем собственном процессе и в фоновом режиме, иначе ваш PHP-скрипт зависнет, ожидая завершения преобразования.

Код:

passthru("nohup /usr/local/bin/ffmpeg -i 1.mp4 -vcodec libtheora -acodec libvorbistestjohn4545454.ogg 1> /path/to/logfile.txt 2>&1 &");

Обратите внимание на «nohup» и амперсанд в конце: они должны дать вам то, что вам нужно. Кроме того, теперь вы можете периодически проверять файл журнала, чтобы убедиться, что он делает то, что вам нужно.

И, наконец, проверьте этот вопрос для создания индикатора выполнения, если тебе нравится.

person Jimbo    schedule 19.02.2013

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

person RaulRM    schedule 19.02.2013

Можете ли вы проверить свою конфигурацию disabled_functions на PHP и посмотреть, нет ли там exec? Также вы можете включить все отчеты об ошибках, а после попытаться exec() с помощью простого эха bash и посмотрите, как это работает. Если все пойдет хорошо, проверьте, используете ли вы правильные файлы, как указал Джейми, рабочий каталог может быть неправильным, поэтому используйте абсолютные или относительные пути, как вам удобнее. Команда Unix для проверки текущего рабочего каталога — pwd.

Изменить: Кроме того, exec имеет еще одну оговорку. When safe mode is enabled, you can only execute files within the safe_mode_exec_dir поэтому не забудьте внимательно прочитать руководство по другим проблемам. .

person Heap    schedule 19.02.2013

Спасибо за ответы. Я использовал passthru() вместо exec(), и все работает нормально.

person Preethy    schedule 19.02.2013
comment
Возможно, вы захотите проверить мой ответ, выводящий файл журнала, запускающий его в фоновом режиме, а также индикатор выполнения. Я создал то же самое, что и вы. Не нужно голосовать, я надеюсь, что вы найдете это полезным. - person Jimbo; 19.02.2013