Об ffmpeg узнал не давно появилось много вопросов.
как получить скриншот из видео с помощью ffmpeg?
Задача: получить изображение конкретного кадра из видео (flv или avi или другого).
ffmpeg -i video.3gp -an -ss 00:01:30 -r 1 -vframes 1 -s 320×240 -y -f mjpeg screenshot.jpg
Эта команда сделает screenshot.jpg размером 320×240 из 90ойсекунды файла video.3gp.
-i — входящий фай
-f — формат исходящего файла
-s — размер исходящего файла в пикселях
-vframes 1 — количество фреймов (необязательный параметр)
-ss 15 — на какой секунде делать скрин;
-y — заменять исходящий файл, если он уже есть
-f - задает формат файла
как это написать в php
http://vbolshov.org.ru/?ctrl=latest&page=2
с середины страницы идет серия постов
SYSTEM()
предположим примерно так
$cmd_mencoder_img = 'ffmpeg -i '.$m2["video_url"].' -an -ss 15-r 1 -vframes 1 -s 120×75 -y -f mjpeg image.jpg';
system("$cmd_mencoder_img", $output_jpg);
ffmpeg — путь к ffmpeg, обычно находится в /usr/bin/ffmpeg;
video.flv — видео, с которого будем делать скрин;
-ss 15 — на какой секунде делать скрин;
-r — fps;
-vframes 1 — количество фреймов (необязательный параметр);
-s 120×75 — размеры картинки в пикселах (px);
image.jpg — получившаяся картинка;
как картинку вывести и куда код писать?
> system("$cmd_mencoder_img", $output_jpg);
почему ты решил что $output_jpg – это картинка? Картинка у тебя в файле image.jpg
вот ее и показывай людям
вместо image.jpg можно написать stdout и получить бинарник картинки в поток, чтобы извлечь это из пхп, нужно воспользоваться функцией passthru($command,1) – тогда функция вернет весь выход.
Но разумеется это делать не надо, картинку надо писать в файл чтобы не вызывать эту программку при каждом обновлении страницы.
И вообще на шаред хостинге это никто вам сделать не даст (имеется ввиду вызвать шелл-команду)
$file='путь к файлу от корня';
(file_exists($file))
{
$mov = new ffmpeg_movie($file);
}
else
{
die('невозможно найти файл');
}
//номер кадра
$frame = 50;
//ширина
$w = $mov->GetFrameWidth();
//высота
$h = $mov->GetFrameHeight();
//извлечение кадра
$ff_frame = $mov->getFrame($frame);
if ($ff_frame)
{
//в формат GD
$gd_image = $ff_frame->toGDImage();
if ($gd_image)
{
//вывод (для примера в gif)
header('Content-type: image/gif');
$nw=$w/4;
$nh=$h/4;
$idest = imagecreatetruecolor($nw, $nh);
imagecopyresampled($idest, $gd_image, 0, 0, 0, 0, $nw, $nh, $w, $h);
imagegif($idest);
/*можно сделать изменение размера, нанесение копирайтов и водяных знаков, в общем все что применимо для GD*/
}
else
{
die('невозможно преобразовать в GD');
}
}
else
{
die('невозможно извлечь кадр');
}
//получаем скриншот по средствам php ffmpeg
// путь до файла
$file = $m2["video_url"];
// кадр который будем выхватывать
$frame = 150;
// получаем кадр
$movie = new ffmpeg_movie($file);
$image = $movie->getFrame($frame);
$show_img = $image->toGDImage();
сделал вот так что дальше?
как вывести?
ну дык сматри по примеру)
Знакомая тема, одно время очень долго с ним мучался, итак, ффмпег должен быть установлен на сервере, причем многие хостеры говорят что он не критичный и нах тип вообще ненужен, попросите либо их его установить, либо получите рут доступ и установите сами, или поменяйте хостера)) После этого возможно придется перевести сайт из safe mod на менее безопасный (короч отключить сайф мод) ну и после этого, пишем system,exec либо другую команду, какая вам больше подойдет, пишем в ней путь доступа к ффмпег (иногда работает и без пути, а просто ффмпег), и нужные вам команды (файлы должны быть с путями от папки программы ффмпег, либо с абсолютными), вроде все написал, остальное в мануале)) Ну или ко мне в личку, может чем еще подскажу))
Наш хостер утверждает что модуль очень требовательный и “сразу жрет процессор на 100%” и соответственно система банит подобный сайт….. что в таком случаем можно сделать?
А расширение ffmpeg-php вроде так, имеет очень скудную ф-ть насколько помню, он вроде и конвертировать то видео не умеет
Кирилл WTLink Сербин, вроде разобрался.
Игорь Владимирович с установкой до сих пор не понял до конца ладно что на хостинге есть. На свой локальный не могу установить может статейку кто подскажет.
Если винда, то просто качай экзешник, если линукс то используй менеджер apt-get yum pacman итд, смотри для каждого отдельно
Вроде все установил ну все равно работает не корректно.
выдает ошибки
Warning: Can't open movie file
Fatal error: Call to a member function GetFrameWidth() on a non-object in
может что ещё не хватает?
Если хочешь чтобы работала ffmpeg-php, то устанавливать надо как расширение к пхп, но оно не умеет вроде файлы конвертировать, а к обычному ффмпег обращайся через команды (функции system exec итд)