Пыха всегда с тобой

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 03 Сентябрь, 2010, 03:07:25

Страниц: [1] 2 3 ... 6
Печать
Автор Тема: Работа с видео на php с помощью php ffmpeg  (Прочитано 10953 раз)
0 Пользователей и 1 Гость смотрят эту тему.
welder    ↓ 
31 Октябрь, 2008, 12:55:34
НЕ ХУЕТА! ХУЕТА!

пыха рулит
Группа: в ухо

Карма: 80
Сообщений: 2471

Работа с видео на 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 - Удалить [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
<?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);
}
 
?>

* ffmpeg-php-win32-all.part1.rar (1464.84 Кб - загружено 703 раз.)
* ffmpeg-php-win32-all.part2.rar (787.52 Кб - загружено 591 раз.)
* primers.rar (1.62 Кб - загружено 246 раз.)
« Последнее редактирование: 31 Октябрь, 2008, 01:27:25 от welder » Записан

adw0rd    ↓ 
31 Октябрь, 2008, 01:48:24 , спустя 52 минуты 50 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: 251
Сообщений: 15352

Очень хорошего качества статьи о ffmpeg
Наносим водяной знак на видео с помощью ffmpeg
Продвинутый метод воспроизведения flash-видео на веб-страницах (или эмулируем стрим-видео) (ffmpeg + yamdi + flv)
« Последнее редактирование: 31 Октябрь, 2008, 01:51:00 от adw0rd » Записан

sap    ↓ 
31 Октябрь, 2008, 09:43:41 , спустя 7 часов 55 минут 17 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Жмурики

Карма: 40
Сообщений: 2697

Спасибо, познавательно :)
Записан

CTAPbIu_MABP    ↓ 
31 Октябрь, 2008, 11:26:27 , спустя 1 час 42 минуты 46 секунд
НЕ ХУЕТА! ХУЕТА!

мавр
Группа: в ухо

Карма: не нужна
Сообщений: 5043

жесть, лови +1
Записан

java.lang.OutOfMemoryError
welder    ↓ 
31 Октябрь, 2008, 11:36:16 , спустя 9 минут 49 секунд
НЕ ХУЕТА! ХУЕТА!

пыха рулит
Группа: в ухо

Карма: 80
Сообщений: 2471

просто делаю домашнию кинотеку на пхп вот и понадобилося всё ето =))
Записан

Pasha    ↓ 
31 Октябрь, 2008, 09:28:25 , спустя 9 часов 52 минуты 9 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 7
Сообщений: 957

спасибо)
Записан

r.i.p. puppy
Pasha    ↓ 
31 Октябрь, 2008, 09:30:48 , спустя 2 минуты 23 секунды
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 7
Сообщений: 957

а есть библиотека для конвертации avi2flv? или т.п?
Записан

r.i.p. puppy
adw0rd    ↓ 
31 Октябрь, 2008, 11:25:57 , спустя 1 час 55 минут 9 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: 251
Сообщений: 15352


а есть библиотека для конвертации avi2flv? или т.п?

с помощью ффмпега из любого формата в любой формат можно конвертировать, главное установить соответствующие модули
Записан

adw0rd    ↓ 
22 Апрель, 2009, 11:30:59 , спустя 172 дня 23 часа 5 минут 2 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: 251
Сообщений: 15352

А с помощью этого расширения конвертировать то можно?
Записан

mario    ↓ 
23 Апрель, 2009, 01:52:42 , спустя 2 часа 21 минуту 43 секунды
НЕ ХУЕТА! ХУЕТА!

водопроводчик
Группа: Джедаи

Карма: 22
Сообщений: 3486


А с помощью этого расширения конвертировать то можно?
http://vbolshov.org.ru/?id=14&ctrl=article
там написано что да :)
PS твои ссылки :)
Записан

adw0rd    ↓ 
23 Апрель, 2009, 02:51:01 , спустя 58 минут 19 секунд
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: 251
Сообщений: 15352

mario, я специально выделил жирным курсивом слово "расширение", потому что меня интересовало именно расширение для php, а не сам ffmpeg :)
 
Кароче не умеет оно конвертировать, я уже излазил оф. сайт. Юзаю по старинке ffmpeg
Записан

Shogun    ↓ 
14 Ноябрь, 2009, 06:28:49 , спустя 205 дней 16 часов 37 минут 48 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 1

Прет всем!
 
Вроде все правильно зделал, но при запуске Апач выдает такое:
 

 
Что можно зделать??
Записан
adw0rd    ↓ 
14 Ноябрь, 2009, 10:28:11 , спустя 3 часа 59 минут 22 секунды
НЕ ХУЕТА! ХУЕТА!

эдво
Группа: в ухо

Карма: 251
Сообщений: 15352

Какая версия php? Могу подкинуть для php 5.2.9-2

* php_ffmpeg.zip (13.45 Кб - загружено 114 раз.)
Записан

IgorN    ↓ 
18 Март, 2010, 01:12:39 , спустя 123 дня 14 часов 44 минуты 28 секунд
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 6

Только приступил к работе с видео. У меня на сайте пользователь будет заливать видео, небольшие файлы 10 м весом и 15 сек. длиной. Надо их сконверить в flv. Как это сделать и можно ли это сделать средствами nginx. Спасибо!
Записан
phpdude    ↓ 
18 Март, 2010, 01:19:27 , спустя 6 минут 48 секунд
НЕ ХУЕТА! ХУЕТА!

я - ЭМО
Группа: в ухо

Карма: 251
Сообщений: 13682

IgorN, конвертить видео средствами веб сервера? пиздец, хедшот ..
 
adw0rd.ru почитайте, там была статья про это, как раз разжевая только проглотайте
Спустя 57 секунд добавил
предлагаю около поста сделать кнопку "отжег дня", и в шапке его показывать, удет прикольно :)
 
ну сортировать по "отжегу дня" посты и показывать в шапке самый кликательный =)
Записан

Маг-Волшебник 20го левела. Снятие порчи, ддос, настройка cron, проклятие серверов конкурентов. php магистр, тролль, клоун
забанен. могу забанить других, пишите в личку
Нас невозможно сбить с пути - нам похую, куда идти :-
Страниц: [1] 2 3 ... 6
Печать
 

Перейти в: