Команда ffmpeg выполняется через командную строку, но не через скрипт PHP - PullRequest
0 голосов
/ 21 марта 2020

Я работаю над простой системой загрузки и сжатия видео и в настоящее время использую следующий процесс.

Первый шаг

Я использую multipart/form-data для загрузить исходный видеофайл, который я храню в /var/www/site/videos_pre/video.mp4. Моя папка c - var/www/site/public_html/. Я храню запись в своей базе данных с видеоинформацией.

Второй шаг

У меня есть процесс конвертации, который очень прост c, но выполняет свою работу ( по крайней мере, в CLI).

Он имеет следующий код:

public function converter($content_id)
{
    $content = $this->videos_m->get($content_id);

    $id = uniqid();
    $name_mp4 = $content->name_slug.'_'.$id.'.mp4';
    $name_webm = $content->name_slug.'_'.$id.'.webm';

    $command_mp4 = 'ffmpeg -i ../videos_pre/'.$content->original_file.' -b:v 1500k -bufsize 1500k ./videos/'.$name_mp4;
    system($command_mp4);

    $command_webm = 'ffmpeg -i ./videos/'.$name_mp4.' -c:v vp9 -c:a libvorbis ./videos/'.$name_webm;
    system($command_webm);

    $update_video = new stdClass();
    $update_video->archivo_mp4 = $name_mp4;
    $update_video->archivo_webm = $name_webm;

    $this->db->where('content_id', $content_id);
    $this->db->update('Videos', $update_video);
}

Третий шаг - при возникновении проблемы

Я проверил это Windows 10 и Ubuntu 18.04. Код работает на Windows 10 в php и cli. Код в Ubuntu работает только с cli.

Полученные команды выглядят примерно так:

// First command to reduce the bitrate of the mp4
ffmpeg -i /var/www/site/videos_pre/video.mp4 -b:v 1500k -bufsize 1500k /var/www/site/public_html/videos/video_5e757d3e0d762.mp4

// Second command to convert the mp4 to a webm to get both types
ffmpeg -i /var/www/site/public_html/videos/video_5e757d3e0d762.mp4 -c:v vp9 -c:a libvorbis /var/www/site/public_html/videos/video_5e757d3e0d762.webm

Если я выполняю эти команды, они работают отлично. Если я запускаю скрипт php, будь то в браузере или через CLI, буквально ничего не происходит. Нет сообщений об ошибках ничего.

Я не уверен, что это проблема с правами, есть ли что-то, определенное c для php, чтобы запустить это, или какой-то модуль, который я не активировал. У меня достаточно времени выполнения, у меня оно составляет 600 секунд, но, как я уже сказал, оно даже не требует времени, оно просто ничего не делает.

Я даже могу повторить команды, и они появляются. Итак, в основном проблема в том, что мне нужно иметь возможность запускать эти команды с PHP. Я сделал это на Windows, но Ubuntu 18.04 не позволил мне. Обе ОС недавно установили ffmpeg , и я смог преобразовать их обе.

Я пытался изменить пути с абсолютного на относительный, никакой разницы нет.

1 Ответ

0 голосов
/ 23 марта 2020

Итак, мне удалось ее решить, и оказалось, что это была проблема с разрешениями.

У меня была папка /var/www/site с такими правами: myuser:www-data. После проверки этого ответа на аналогичную проблему я изменил разрешение папки на www-data:root, и оно заработало мгновенно.

Я надеюсь, что изменение разрешения не повлияет на все остальное, но сейчас все работает нормально.

...