Установка php ffmpeg под Windows.
1. качаем уже собранный php ffmpeg от Sergey Fedotov
2. распаковываем архив
3. копируем файл php_ffmpeg.dll в папку php/extensions
4. копируем файлы avformat-51.dll, avcodec-51.dll, avutil-49.dll ,pthreadGC2.dll в папку windows/system32
5. добавляем в php.ini строку: extension=php_ffmpeg.dll
6. перезапускаем Apache
7. проверяем всё ли у нас получилось var_dump(extension_loaded('ffmpeg')) или через phpinfo()
скорей всего у нас получилось так что ознакомимся с функциями =)
Перевод официальной документации (API Docs)
$movie = new ffmpeg_movie(String path_to_media, boolean persistent)
Открыть аудио или видео файл и Вернёт объект.
path_to_media - Путь к аудио или видео файлу
persistent - Открыть как постоянный ресурс. О постоянных ресурсах
читайте в документации по PHP
$movie->getDuration()
Вернёт продолжительность аудио или видео файла в секундах.
$movie->getFrameCount()
Вернёт количество кадров (фреймов) аудио или видео файла.
$movie->getFrameRate()
Вернёт частоту кадров видео в кадрах в секунду (fps - frame persecond)
$movie->getFilename()
Вернёт путь к видео или аудио файлу
$movie->getComment()
Вернёт поле комментария из аудио или видео файла
$movie->getTitle()
Вернёт поле заголовка из аудио или видео файла
$movie->getAuthor() псевдоним $movie->getArtist()
Вернёт поле "автор" из видео файла или "автор" из ID3 поля mp3 файла
$movie->getCopyright()
Вернёт поле "авторское право" из аудио или видео файла
$movie->getArtist()
Вернёт ID3 поле "Артист" из mp3 файла
$movie->getGenre()
Вернёт ID3 поле "Жанр" из mp3 файла
$movie->getTrackNumber()
Вернёт ID3 поле "номер дорожки" из mp3 файла
$movie->getYear()
Вернёт ID3 поле "Год" из mp3 файла
$movie->getFrameHeight()
Вернёт высоту видео в пикселях
$movie->getFrameWidth()
Вернёт ширину видео в пикселях
$movie->getPixelFormat()
Вернёт формат пикселов видео
$movie->getBitRate()
Вернёт скорость потока(битрейт) видео или аудио файла в битах в
секунду
$movie->getVideoBitRate()
Вернёт скорость потока(битрейт) видео в битах в секунду.
Замечание : Работает только с файлами у которых постоянный битрейт
$movie->getAudioBitRate()
Вернёт скорость потока(битрейт) аудио у видео или аудио файла в
битах в секунду.
$movie->getAudioSampleRate()
Вернёт скорость дискретизации аудио у видео или аудио файла в битах
в секунду.
$movie->getFrameNumber()
Вернёт текущий номер кадра.
$movie->getVideoCodec()
Вернёт название видео кодека который использован для видео файла
как строку
$movie->getAudioCodec()
Вернёт название аудио кодека который использован видео файл как
строку
$movie->getAudioChannels()
Вернёт количество аудио каналов (1 моно 2 стерео и т д) как целое
число
$movie->hasAudio()
Вернёт логическое значение соответствующие наличию или отсутствию
аудио
$movie->getFrame([Integer framenumber])
Вернёт кадр из видео как ffmpeg_frame объект. Возратит логическую
ложь (false) если кадра нет
framenumber -Номер кадра который надо возратить. Если framenumber
не определен то возращается следующий кадр из видео.
$movie->getNextKeyFrame()
Вернёт следующий ключевой кадр как ffmpeg_frame объект. Возратит
логическую ложь (false) если кадра нет
ffmpeg_frame object methods
$frame = new ffmpeg_frame(Resource gd_image)
Создаст обьект ffmpeg_frame из ресурса GD картинки.
Замечание : Функция недоступна если нет библитеки GD.
$frame->getWidth()
Вернёт ширину кадра.
$frame->getHeight()
Вернёт высоту кадра.
$frame->getPTS() alias $frame->getPresentationTimestamp()
Возвращает время создания кадра.
$frame->resize(Integer width, Integer height [, Integer crop_top [,
Integer crop_bottom [, Integer crop_left [, Integer crop_right ]]]])
Изменяет размер и обрезает кадр (Обрезание встроено в изменение
размера картинка ffmpeg и сделал его для полноты)
width - Новая ширина кадра (должено быть натуральным числом)
height - Новая высота кадра (должено быть натуральным числом)
croptop - Удалить [croptop] рядов пикселов с верху кадра.
cropbottom - Удалить [cropbottom] рядов пикселов с низу кадра.
cropleft - Удалить [cropleft] рядов пикселов с лева у кадра..
cropright Удалить [cropright] рядов пикселов с права у кадра..
Замечание: Обрезание всегда происходит до измения размера кадра.
Значения параметров обрезания должны быть натуральными числами.
$frame->crop(Integer crop_top [, Integer crop_bottom [, Integer
crop_left [, Integer crop_right ]]])
Обрезать кадр.
croptop - Удалить [croptop] рядов пикселов с верху кадра.
cropbottom - Удалить [cropbottom] рядов пикселов с низу кадра.
cropleft - Удалить [cropleft] рядов пикселов с лева у кадра..
cropright Удалить [cropright] рядов пикселов с права у кадра..
Замечание : Параметры должны быть натуральными числами
$frame->toGDImage()
Возвращает truecolor GD картинку (ресурс) кадра
Замечание : Функция недоступна если нет библитеки GD.
ffmpeg_animated_gif
$gif = new ffmpeg_animated_gif(String output_file_path, Integer width,
Integer height, Integer frame_rate, [Integer loop_count])
Создает новый ffmpeg_animated_gif обьект
output_file_path - Путь в файловой системе куда будет записан
анимированный gif .
width - Ширина анимированого gif'а
height - Высота анимированного gif'а
frame_rate - Частота кадров анимированного gif'а в кадрах в
секунду
loop_count - Количество повторений анимации. Укажите 0 для
бесконечного повторения или пропустите параметр для отключения
повторений.
$frame->addFrame(ffmpeg_frame frame_to_add)
Добавляет кадр в конец анимированного gif'а.
frame_to_add - ffmpeg_frame обьект для добавления в конец
анимированного gif'а.
Теперь рассмотрим некоторые примеры
1. Узнаём информацию о видео файле .
<?php
// получаем продолжительность и размеры видео
$movie = new ffmpeg_movie("/www/1.avi");
echo "Продолжительность фильма: ";
// так как мы получаем секунды надо нам их перевести в человечный вид ЧЧ:ММ:CC
// для этого мы и используем функцию gmdate я думаю фильмов длиной по несколько дней у вас нет =)
echo "<b>".gmdate("H:i:s",$movie->getDuration())."</b><br />";
// теперь выведем размерв нашего фильма
echo "Размеры фильма: ";
echo "<b>".$movie->getFrameWidth()." x ".$movie->getFrameHeight()."</b>";
?>
2. Получаем кадр.
<?php
//получаем скриншот по средствам php ffmpeg
// путь до файла
$file = "/www/1.avi";
// кадр который будем выхватывать
$frame = 150;
// получаем кадр
$movie = new ffmpeg_movie($file);
$image = $movie->getFrame($frame);
$show_img = $image->toGDImage();
// выводим его
header("Content-type: image/jpeg");
imagejpeg($show_img);
imagedestroy($show_img);
?>
3. Получаем и редактируем кадр.
<?php
// получаем скриншот по средствам php ffmpeg и уменьшаем его
// путь до файла
$file = "/www/1.avi";
// кадр который будем выхватывать
$frame = 150;
// максимальный размер по высоте
$max_width = 150;
// получаем кадр в gd
$movie = new ffmpeg_movie($file);
$image = $movie->getFrame($frame);
$show_img = $image->toGDImage();
// редактируем то что в gd
$new_image = new ffmpeg_frame($show_img);
//вычисляем старые значения ширины и высоты
$old_width = $new_image->getWidth();
$old_heighgt = $new_image->getHeight();
// соотношение сторон
$mov_ratio = $old_width/$old_heighgt;
if($old_width > $max_width){
$new_width = $max_width;
}
// задаём новые параметры
$new_height = $new_width / $mov_ratio;
// изменяем размер
$new_image->resize($new_width, $new_height);
$new_show_img = $new_image->toGDImage();
// выводим его
header("Content-type: image/jpeg");
imagejpeg($new_show_img);
imagedestroy($new_show_img);
?>
4. Создаём анимированный GIF.
<?php
// создаём анимированый гиф
// путь до файла
$file = "/www/1.avi";
// поехали =)
$movie = new ffmpeg_movie($file);
// создаём анимацию
$gif=new ffmpeg_animated_gif("/www/primer.gif",100 ,100 ,24);
for ($frame = 150; $frame <= 200; $frame++) {
$image = $movie->getFrame($frame);
$gif->addFrame($image);
}
?>