sh: ffmpeg: команда не найдена при запуске команды через переполнение стека

Я успешно установил FFMpeg в корневой каталог моего компьютера Centos 6 (https://trac.ffmpeg.org/wiki/CompilationGuide/Centos).

Мое рабочее место apache / php — / var / www / html

Теперь я успешно запускаю следующую команду в каталоге / var / www / html для захвата кадра из видеофайла. Это захват кадра.

[root@localhost html]# ffmpeg -i video.mpg -an -ss 30  -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg -s 160x100 frame8  2>&1

Я хочу выполнить эту команду через php и используя php-функции shell_exec () или exec (). Мой PHP-код для запуска команды:

$cmd = "/root/bin/ffmpeg -i /project/app/webroot/videos/video.mpg -ss 00:00:14.435 -f image2 -vframes 1 /project/app/webroot/videothumbnails/example-thumb.jpg";
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo shell_exec($cmd);

Когда я пытаюсь выполнить команду через вышеуказанный код php, я получаю сообщение об ошибке ниже:

sh: ffmpeg: command not found

Пожалуйста, помогите мне решить эту проблему.

1

Решение

Для создания миниатюр видео мы используем ffmpeg.

В Linux Systems (centos 6.x) процесс установки Ffmpeg и пример Php: —

Этот процесс сделан в моих centos 6 и создан эскизы с использованием php.

Шаг 1:- Пожалуйста, проверьте, существует ли какой-либо существующий ffmpeg или нет на вашем сервере Linux. Если он есть, удалите эти файлы.

Шаг 2:- Для новой установки ffmpeg перейдите по этой ссылке
http://root.uabid.com/compile-ffmpeg-on-centos-6-x/ .

Шаг 3:- После завершения установки проверьте, где установлен ваш ffmpeg.

Команда: whereis ffmpeg

введите эту команду в командной строке Linux и проверьте. Если, например, ваш путь ffmpeg находится в (/ usr / local / bin / ffmpeg).
Используйте этот путь в своем коде.

Пример PHP: —

<?php

if($extension === 'mp4' OR $extension == 'MP4' )
{
$video = $timestamp.$imagename;
$videoname=substr($imagename,0, -4).$timestamp;
$image = "sites/default/files/content_images/{$videoname}-thumb.jpg";

var_dump($video);

$cmd = "/usr/local/bin/ffmpeg -i    /opt/lampp/htdocs/myproject/sites/default/files/content_videos/".$video." -ss   00:00:01.435 -f image2 -vframes 1       /opt/lampp/htdocs/myproject/sites/default/files/content_images/".$videoname."-  thumb.jpg";

$cmdstr = $cmd;
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo exec($cmd);
?>

Процесс 2: —
Это для статических путей к файлам:

<?php
$cmd = "/root/bin/ffmpeg -i /var/www/html/project/app/webroot/videos/example.mp4 -ss   00:00:01.435 -f image2 -vframes 1 /var/www/html/project/app/webroot/videothumbnails/example-thumb.jpg";
$cmdstr = $cmd;
$locale = 'en_IN.UTF-8';
setlocale(LC_ALL, $locale);
putenv('LC_ALL='.$locale);
echo exec($cmd);
?>

Надеюсь, это поможет вам & другие ..

2

Другие решения

Попробуйте использовать which найти бинарный файл ffmpeg. По крайней мере, в Linux на основе Ubuntu / Debian which Команда должна быть доступна по умолчанию. which возвращает путь к файлу к предпочтительному исполняемому файлу любого доступного приложения. Например. which php должен вернуть исполняемый файл установки PHP, который используется по умолчанию для операций CLI. Следовательно which ffmpeg должен вернуть системное местоположение по умолчанию для установки ffmpeg.

<?php

// shell_exec returns the command output or null on error/empty output.
$ffmpeg_path = shell_exec('which ffmpeg');

if ($ffmpeg_path != null) {
shell_exec($ffmpeg_path . ' -i file.mpg --snip--');
}

Также убедитесь, что пользователь Linux, использующий скрипт PHP, имеет доступ к ffmpeg (например, $ chmod +x ffmpeg). Если $ sudo which ffmpeg возвращает путь, но $ which ffmpeg нет, попробуйте переустановить ffmpeg для нужного пользователя или поиграйтесь с разрешениями.

РЕДАКТИРОВАТЬ: используйте осторожность с which однако неизвестно, сможет ли взломщик заменить исполняемый файл ffmpeg чем-то вредоносным (что приводит к тому, что приведенный выше скрипт PHP запускает неправильный исполняемый файл).

1

Я видел эту проблему. Для меня «команда не найдена» может быть $PATH переменная проблема.

Когда запускаете эту команду через php и используете shell_exec() или же exec() PHP функции, вы можете использовать разные $PATH Переменная сравнить с запущенной командой в каталоге Linux.

Например, /usr/local/php/etc/vhostphp-fpm.conf для моего проекта php ниже:

env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
env[LD_LIBRARY_PATH] = /usr/local/lib

но ffmpeg Команда находится в /data/bin каталог. Мой линукс $PATH переменная содержит /data/bin,

Так добавь /data/bin в env[PATH] Переменная выше может решить проблему.

0