Я успешно установил 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
Пожалуйста, помогите мне решить эту проблему.
Для создания миниатюр видео мы используем 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);
?>
Надеюсь, это поможет вам & другие ..
Попробуйте использовать 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 запускает неправильный исполняемый файл).
Я видел эту проблему. Для меня «команда не найдена» может быть $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]
Переменная выше может решить проблему.