Этот сайт не наркоманов. Это сайт программистов.

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

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

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

Новости

Пыха переехала на новый сервер, ура!

Краснодарское время: 26 Май, 2012, 01:18:21

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

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

Карма: 84
Сообщений: 2924
Сила слова: 2.87

Работа с видео на 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 Кб - загружено 1591 раз.)
* ffmpeg-php-win32-all.part2.rar (787.52 Кб - загружено 1298 раз.)
* primers.rar (1.62 Кб - загружено 466 раз.)
« Последнее редактирование: 31 Октябрь, 2008, 01:27:25 от welder » Записан

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

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

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
sap    ↓ 
31 Октябрь, 2008, 09:43:41 , спустя 7 часов 55 минут 17 секунд
НЕ ХУЕТА! ХУЕТА!

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

Карма: 40
Сообщений: 2697
Сила слова: 1.48

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

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

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

Карма: не нужна
Сообщений: 5187
Сила слова: 1.81

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

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

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

Карма: 84
Сообщений: 2924
Сила слова: 2.87

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

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

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

Карма: 7
Сообщений: 1028
Сила слова: 0.68

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

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

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

Карма: 7
Сообщений: 1028
Сила слова: 0.68

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

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

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

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67


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

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
adw0rd    ↓ 
22 Апрель, 2009, 11:30:59 , спустя 172 дня 23 часа 5 минут 2 секунды
НЕ ХУЕТА! ХУЕТА!

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

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
mario    ↓ 
23 Апрель, 2009, 01:52:42 , спустя 2 часа 21 минуту 43 секунды
НЕ ХУЕТА! ХУЕТА!

wazzup
Группа: Джедаи

Карма: 67
Сообщений: 6162
Сила слова: 1.09


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

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

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

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
Shogun    ↓ 
14 Ноябрь, 2009, 06:28:49 , спустя 205 дней 16 часов 37 минут 48 секунд
НЕ ХУЕТА! ХУЕТА!

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

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

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

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

Карма: не нужна
Сообщений: 17634
Сила слова: 1.67

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

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

Python, Django, Git, Emacs, Nginx, MySQL, SphinxSearch, FreeBSD/Linux
Мой блог * Кинсбург * Либург * Я на GitHub
IgorN    ↓ 
18 Март, 2010, 01:12:39 , спустя 123 дня 14 часов 44 минуты 28 секунд
НЕ ХУЕТА! ХУЕТА!

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

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

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

Карма: 345
Сообщений: 20793
Сила слова: 1.66

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

забанен. могу забанить других, пишите в личку
BEER. Helping ugly people have sex since 1862.
Страниц: [1] 2 3 ... 8
Печать
 

Перейти в:  

Этот топик скрыли: NRG, adw0rd, Sinkler, Frozzeg, artoodetoo, Ivan