PHP

Работа с видео на php с помощью php ffmpeg

Установка 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 - Удалить
 рядов пикселов с верху кадра.
    cropbottom - Удалить [cropbottom] рядов пикселов с низу кадра.
    cropleft - Удалить [cropleft] рядов пикселов с лева у кадра..
    cropright Удалить [cropright] рядов пикселов с права у кадра.. 
 
  Замечание:  Обрезание  всегда  происходит  до  измения  размера кадра.
  Значения параметров обрезания должны быть натуральными числами. 
[PHP]  $frame->crop(Integer   crop_top  [,  Integer  crop_bottom  [,  Integer
  crop_left [, Integer crop_right ]]])

Обрезать кадр.
croptop - Удалить
 рядов пикселов с верху кадра.
    cropbottom - Удалить [cropbottom] рядов пикселов с низу кадра.
    cropleft - Удалить [cropleft] рядов пикселов с лева у кадра..
    cropright Удалить [cropright] рядов пикселов с права у кадра.. 
 
  Замечание : Параметры должны быть натуральными числами 
[PHP]  $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
<?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
//получаем скриншот по средствам 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
// получаем скриншот по средствам 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
<?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);
} 
 
?>
Добавлено: 20 Августа 2013 02:49:44 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...