Я установил успешно установленную 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 и использовать функции shell_exec () или exec () php. Мой 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
Пожалуйста, помогите мне решить эту проблему.
Для создания видео Thumbnail мы используем 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); ?>
Надеюсь, это поможет вам и другим.
Попробуйте использовать, чтобы найти двоичный файл 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 для желаемого пользователя или поиграть с разрешениями.
EDIT: используйте осторожность, с which
однако, неизвестно, может ли взломщик заменить исполняемый файл ffmpeg чем-то вредоносным (что приводит к тому, что указанный выше скрипт PHP работает неправильно).