Ключевые слова:mpeg, video, php, (найти похожие документы)
From: Saint_Byte
Date: Mon, 31 Jul 2007 14:31:37 +0000 (UTC)
Subject: Обработка видео на PHP средствами модуля ffmpeg-php
Оригинал: http://dotblog.ru/blog_comment/sb/108.xhtmlFfmpeg-php это модуль для php который позволяет делать некоторые вещи
с видео. Для того чтоб это штука заработала надо иметь сурцы ffmpeg'а
( в основном сурцы двух библиотек libavcodec и libavformat ибо
ffmpeg-php это по сути "гейт" этих библиотек в php ) и собранный с
--enable-shared ffmpeg и библиотеку gd2 (нафиг вам только свойства
видео - с ГД можно кадры выдирать). Собирается ffmpeg-php просто:
tar -xjf ffmpeg-php-X.x.x.tar.gz
cd ffmpeg-php-X.x.x/
phpize
./configure && make
make install (под рутом )
Далее получаем бинарик ffmpeg.so в папке module . Этот бинарик надо
засунуть в каталог который extension_dir в php.ini и прописать в
php.ini extension=ffmpeg.so после чего если php как модуль у веб
сервера apache перегрузить вебсервер (apachectl restart). Далее
делается наблюдаем результаты функции phpinfo() - если там есть что-то
про ffmpeg - значить модуль подключился. Теперь в php есть ещё 3
класса от которых можно порождать обьекты. Ну и перевод документации
по API.За перевод сильно не пинайте =)) . Оригинальное описание
описание API : http://ffmpeg-php.sourceforge.net/apidoc.phpffmpeg_movie обьекта методы.
$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()
Возвращает время создания кадра.
(Return the presentation time stamp of the frame).
$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'а.
Стоит задача вытащить кадр с определенного места по времени, скажем, на 5-ой секунде. Тупо множу частоту на секунды, и вытаскиваю получившийся номер фрейма - не тут-то было!
$movie->getFrameCount() и $movie->getFrameRate() очень некорректно работают с различными типми видео
на flv отдал мне частоту 1000 кадров/сек, вместо реальных 15 кадров/сек
на wmv - 50 кадров/сек вместо 25 кадров/сек
пасибо тебе афтор
реально интересно
теперь анимированные гифы конвертю по правильному
а до этого юзал тормознутый бред (на шарных хостах правда выбора нету):
погугли GIFEncoder.class.php GIFDecoder.class.php если интересно