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] рядов пикселов с права у кадра.. 
 
  Замечание:  Обрезание  всегда  происходит  до  измения  размера кадра.
  Значения параметров обрезания должны быть натуральными числами. 
 
  $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. 
 
[B]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);
} 
 
?>
Теги:
ffmpeg, видео
Добавлено: 27 Мая 2018 07:15:59 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...