Сборка расширения ffmpeg-php (php_ffmpeg.dll) для PHP 5 на Windows

15 Apr 2008
Рабочее окружение: Необходимые файлы: Подготовка рабочего окружения.
Создайте рабочую папку, в которой будут размещаться все необходимые файлы, например, C:\Development\PHP\ffmpeg. Распакуйте туда исходные коды PHP, дистрибутив PHP, исходные коды ffmpeg-php, библиотеки и заголовочные файлы FFmpeg. Также положите в эту папку заголовочные файлы inttype.h и stdint.h.

Создайте новый проект в MVS. Тип проекта – Win32, шаблон – Win32 Project. Введите имя проекта, например: php_ffmpeg (по имени будущей dll). Укажите в качестве места расположения созданную ранее папку. В окне Application Wizard перейдите на вкладку Application Settings. Установите Application TypeDLL, Additional OptionsEmpty Project. Завершите создание проекта, нажатием кнопки Finish.

В окне Solution Explorer добавьте в папку Header Files заголовочные файлы ffmpeg-php: ffmpeg_animated_gif.h
ffmpeg_frame.h
ffmpeg_movie.h
gd.h
gd_io.h
php_ffmpeg.h
Там же добавьте в папку Source Files файлы исходных кодов ffmpeg-php: ffmpeg_animated_gif.c
ffmpeg_errorhandler.c
ffmpeg_frame.c
ffmpeg_movie.c
ffmpeg_php.c
Приступим к конфигурированию проекта. Откройте меню Project и выберите пункт Properties. Перед вами появится окно настройки проекта. Сразу же откройте вкладку Configuration Properties. Вверху выберите конфигурацию - Release. Перейдите на вкладку C/C++ -> General. В поле Additional Include Directories добавьте следующие пути: C:\Development\PHP\ffmpeg
C:\Development\PHP\ffmpeg\php-5.2.5
C:\Development\PHP\ffmpeg\php-5.2.5\TSRM
C:\Development\PHP\ffmpeg\php-5.2.5\Zend
C:\Development\PHP\ffmpeg\php-5.2.5\main
C:\Development\PHP\ffmpeg\ffmpeg-r10461-include\include\ffmpeg
C:\Program Files\Microsoft Platform SDK\Include
Перейдите на вкладку C/C++ -> Preprocessor и в поле Preprocessor Definitions добавьте следующие строки: PHP_WIN32
ZEND_WIN32
ZTS=1
ZEND_DEBUG=0
HAVE_LIBGD20=1
COMPILE_DL_FFMPEG
Теперь перейдите на вкладку Linker -> General. В Additional Library Directories добавьте два пути: c:\Development\PHP\ffmpeg\php-5.2.5-Win32\dev
C:\Development\PHP\ffmpeg\ffmpeg-r10461-lgpl-lshared-win32\lib
Перейдите на вкладку Linker -> Input и введите в поле Additional Dependencies строки: php5ts.lib
avcodec-51.lib
avformat-51.lib
avutil-49.lib
Перейдите на вкладку Linker -> Command Line и в поле Additional options добавьте: /FORCE:MULTIPLE Если вы указали имя проекта отличное от php_ffmpeg, перейдите на вкладку Linker -> General и в поле Output File введите: $(OutDir)\php_ffmpeg.dll Это нужно для того, чтобы не пришлось переименовывать dll после сборки.

Попробуйте собрать расширение, нажав клавишу F7. В консоле появятся сообщения о ошибках.

Устранение ошибок. fatal error C1083: Cannot open include file: 'config.h': No such file or directory Откройте файл ffmpeg-php-0.5.2.1\ffmpeg_frame.c и найдите следующую строку: #include "config.h" Замените её на: #ifdef HAVE_CONFIG_H
#include "config.h"
#endif
error C2466: cannot allocate an array of constant size 0 Откройте файл php-5.2.5\main\config.w32.h и закомментируйте строку: //#define _USE_32BIT_TIME_T 1 Сборка расширения.
После этого попробуйте снова собрать расширение. Больше сообщений об ошибках быть не должно. На выходе получится заветный dll php_ffmpeg\release\php_ffmpeg.dll. Скопируйте его в папку с расширениями PHP и добавьте в php.ini строку: extension=php_ffmpeg.dll Также скопируйте файлы из папки ffmpeg-r10461-lgpl-lshared-win32\dll и файл pthreadGC2.dll в папку system32.

Проверить загрузилось расширение или нет можно через консольную версию php.
> php -v
PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

> php -r "var_dump(extension_loaded('ffmpeg'));"
bool(true)
Процесс сборки расширения можно считать законченным.

Скачать php_ffmpeg.dll для PHP 5 (ZIP, 12.5 Кб)
Скачать php_ffmpeg.dll и необходимые DLL для PHP 5 (ZIP, 2.59 Мб)
нет тэгов
25 Jun 2008 AlexNZ
Это так же работает с версией
PHP 5.2.2 (cli) (built: May 2 2007 19:18:26)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

ядро, как мы видим одно.

Большое спасибо.
05 Jul 2008 Гершумов Александр
Скачал ffmpeg-php-win32-all.zip, разбросал по папкам, поправил ini - работать отказывается, предлагает его переинсталировать. Где могла "собака порыться"?

log:
PHP Warning: PHP Startup: Unable to load dynamic library 'PHP\ext\php_ffmpeg.dll' - This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.

>php -v
PHP 5.2.5 (cli) (built: Nov 8 2007 23:18:51)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

>php -r "var_dump(extension_loaded('ffmpeg'));"
bool(false)
05 Jul 2008 Sergey Fedotov
Какая ОС? Попробуйте установить Microsoft Visual C++ 2005 Redistributable Package.
http://www.microsoft.com/downloads/details.aspx?familyid=32bc1bee-a3f9-4c13-9c99-220b62a191ee&displaylang=en
07 Jul 2008 Гершумов Александр
>Какая ОС?
Сорри, забыл указать в предыдущем посте, что ос не Windows XP SP 2, а Windows Server 2003 SP1
07 Jul 2008 Гершумов Александр
Спасибо за ссылку на Microsoft Visual C++ 2005 Redistributable Package - помогло.
26 Aug 2008 gillbeits
есть сборка под php - 5.2.6, Redistributable Package не нужен, ибо под статик компилился - размер конечно в два раза больше, но это терпит...кому надо - пишите на мыл... gillbeits@gmail.com
26 Aug 2008 Sergey Fedotov
Если вышлете мне эту сборку, то я могу её у себя выложить. Только если она была проверена на Windows 2003 Server, т.к. для XP Redistributable Package не требуется и так.
27 Nov 2008 Igor
Спасибо за работу
28 Nov 2008 Ronder
Умеет ли ffmpeg-php конвертировать видео из avi в flv? Если да - то с помощью какой функции? Заранее благодарен.
28 Nov 2008 Sergey Fedotov
ffmpeg-php это не конвертер. Используйте консольную утилиту ffmpeg
15 Dec 2008 Lex
как работать с большим файлом ~5гб
22 Dec 2008 Arvitaly
здравствуйте,
Поставил все норм. Проверяю

C:\>cd php5

C:\php5>php -v
PHP 5.2.1 (cli) (built: Feb 7 2007 23:11:26)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

C:\php5>php -r "var_dump(extension_loaded('ffmpeg'));"
bool(true)

<?php
echo phpinfo();
?>

Ни одной строчки про ffmpeg

А при запуске страницы с кодом
<?php
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

// load extension
if(!extension_loaded($extension)) {
dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}
?>
Выдает
Can't load extension C:\php5/ffmpeg.dll
22 Dec 2008 Sergey Fedotov
Проверьте, что используется тот же php.ini, что и в консольной версии. В phpinfo в секции Loaded configuration file указан загруженный ini файл.
14 Jan 2009 Тигренок
Классная статья Сергей. Оживляй блог:) Постараюсь быть частым гостем!)
29 Mar 2009 VAN
to gillbeits,
здравствуйте!
Нужна сборка под PHP 5.2.6, ОС Windows Vista Ultimate SP1 64-битная версия.
---
to Sergey Fedotov,
здравствуйте, если у Вас уже имеется такая сборка под PHP 5.2.6 - выложите и её пожалуйста!
---
ВСЕМ ЗАРАНЕЕ БЛАГОДАРЕН!!!
30 Mar 2009 Sergey89
А чем существующая сборка под 5.2.5 не устраивает?
09 Apr 2009 Mayss
Sergey Fedotov! огромное спасибо за данный мануал по компиляции!.
17 Apr 2009 Lkt
Компилю под WinVista SP1 32bit MVS2008
ffmpeg-php-0.6.1
php-5.2.9
ffmpeg-r18533-swscale-r29184-mingw32-shared-dev

получаю:
1>------ Построение начато: проект: php_ffmpeg, Конфигурация: Debug Win32 ------
1>Компиляция...
1>ffmpeg_frame.c
1>d:\servers\http\ffmpeg_comp\ffmpeg\php-5.2.9\tsrm\readdir.h(10) : warning C4005: _WIN32_WINNT: изменение макроопределения
1> c:\program files\microsoft sdks\windows\v6.0a\include\sdkddkver.h(151): см. предыдущее определение '_WIN32_WINNT'
1>d:\servers\http\ffmpeg_comp\ffmpeg\ffmpeg-php-0.6.1\ffmpeg_frame.c(336) : error C2065: PIX_FMT_RGBA32: необъявленный идентификатор
1>d:\servers\http\ffmpeg_comp\ffmpeg\ffmpeg-php-0.6.1\ffmpeg_frame.c(421) : error C2065: PIX_FMT_RGBA32: необъявленный идентификатор
1>d:\servers\http\ffmpeg_comp\ffmpeg\ffmpeg-php-0.6.1\ffmpeg_frame.c(432) : error C2065: PIX_FMT_RGBA32: необъявленный идентификатор
1>Журнал построения был сохранен в "file://d:\Servers\HTTP\ffmpeg_comp\ffmpeg\php_ffmpeg\php_ffmpeg\Debug\BuildLog.htm"
1>php_ffmpeg - ошибок 3, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========

Сергей, не поможешь откомпилить ) ?
18 Apr 2009 Sergey89
Сейчас катастрофически не хватает времени. Как только смогу выделить пару часиков, попробую собрать новую версию.
01 Jun 2009 Recycler
Hello. I see you compiled and released ffmpeg-PHP for Windows working on most PHP5 versions, but appearently it's not working correctly for PHP 5.2.9. It's not loading at all, heres what I get:

PHP Warning: PHP Startup: Unable to load dynamic library 'C:\\...\\php_ffmpeg.dll' - The specified module could not be found.\r\n in Unknown on line 0

Every file is where it should be and there is an entry in php.ini so I'm not loading the module via PHP script, so. Hope you can help me (and maybe several others).

Sorry I don't speak russian.
01 Jun 2009 Sergey89
Hi. I will try to compile ffmpeg-php for php 5.2.9 this week. Tell me your e-mail so I'll write you if I succeed.
01 Jun 2009 Recycler
Thank you very much for your work ;)

-> recycler1993@t-online.de
09 Jun 2009 adw0rd
Смени http://arrozcru.no-ip.org/ffmpeg_builds/ на http://ffmpeg.arrozcru.org/builds/
09 Jun 2009 Sergey89
ok, спасибо.
16 Jun 2009 ipz
Hi, Sergei,

Good article.
I'm also getting an error message from ffmpeg_php.dll attempting to load it under php 5.2.9 ... and I wonder if you've been able to recompile it for 5.2.9? If yes, would you be kind enough post a new link?
TIA,
Garry
27 Jun 2009 Роман
Здравствуйте! Такая проблемма у меня стоит локальный сервер StpServer оперционка Windows XP SP3 (Zver 2009), скачал архив раскидал все файлы по нужным папкам проверяю phpinfo библиотека присутствует, но она все равно не работет.
----------------------
T:\usr\local\PHP\>php -r "var_dump(extension_loaded('ffmpeg'));"
bool(false)
----------------------
Microsoft Visual C++ 2005 Redistributable Package установлен, в чём может быть проблемма
29 Jun 2009 Sergey89
cli версия может использовать другой php.ini файл.
07 Jul 2009 Barnaul discovery
У меня такой вопрос: нельзя ли как-нибудь прописать путь отличный от c:/windows/system32? Пока на моем компе скрипт - все ОК. А ведь мне потом его на реальный сервер заливать придется!
08 Jul 2009 Barnaul discovery
И еще вопрос возник: сделал все как надо, но команда $movie = new ffmpeg_movie() не может файл открыть. Выдает ошибку открытия файла. Если прописываешь прямой путь - работает, если относительный - нет
09 Jul 2009 Johny Walker
Здравствуйте! Если у кого уже есть сборка для php 5.2.9, вышлите пожалуйста: buhaem@gmail.com
If someone got compilation for 5.2.9, please send to buhaem@gmail.com
10 Jul 2009 Евгений
PHP Warning: PHP Startup: ffmpeg: Unable to initialize module
Module compiled with module API=20060613, debug=0, thread-safety=1
PHP compiled with module API=20050922, debug=0, thread-safety=1
These options need to match
in Unknown on line 0
bool(false)
10 Jul 2009 Евгений
win XP Sp3
15 Jul 2009 Leonardo
При
>php -r "var_dump(extension_loaded('ffmpeg'));"
пишется
bool(true)
но Виста сообщает об отказе работы некого приложения CLI, в коде
extension_loaded('ffmpeg')
выдаёт пустое значение.
16 Jul 2009 Leonardo
сделал свою сборку (после долгих танцев с бубном) и всё запахало... только я юзаю пхп 5.2.6 а исходники на 5.2.10
17 Jul 2009 Sergey89
Можете куда-нибудь выложить сборку, чтобы протестировать её на версии 5.2.9 и 5.2.10?
19 Jul 2009 Георгий(belarus)
Прывятанне! У мяне ёсць глупаватае пытанне ^_^. Неабходна штосьці яшчэ для прайгравання відэа? Сурфэйсы(SDL) там ўсякія?

Проста цікава.
*спрабую паставіць...*
18 Aug 2009 Veronica
Можете куда-нибудь выложить сборку, чтобы протестировать её на версии 5.2.9 очень надою, пожалуйста
16 Sep 2009 Kidman
У меня вопрос следующего содержания!!!!
Хочу сделать следующее, чтоб ролик загружался на сервак и на лету делал скриншот.
Ролик загружается, но скриншот не могу сделать, так как скрипт не видит файл.
Привожу ниже код ... посмотрите может я гдето ошибся...
_________________________________________
// Определяем расширение файла
$ext = strrchr($_FILES['video']['name'], ".");
// Формируем путь к файлу
$video = "../video/".date("YmdHis",time())."$ext";
if (move_uploaded_file($_FILES['video']['tmp_name'],"../".$video))
{
// Уничтожаем файл во временной директории
// unlink($_FILES['video']['tmp_name']);
// Изменяем права доступа к файлу
chmod("../".$video, 0644);
......
// Использую загруженный файл
$movie = new ffmpeg_movie("../".$video);
Вот здесь и выдает ошибку
Warning: Can't open movie file ../../video/20090915230441.mp4
21 Sep 2009 _stas
При вызове $frame->toGDImage(); выдает ошибку

Fatal error: Error can't find imagecreatetruecolor function in G:\jobnew\scripts\create_thumbs\load.php on line 53
25 Sep 2009 Sergey89
_stas, проверьте наличие библиотеки GD 2.0
06 Oct 2009 ROman
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/AppServ\php5\ext\p
hp_mysql.dll' - ═х эрщфхэ єърчрээ√щ ьюфєы№.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/AppServ\php5\ext\p
hp_mysqli.dll' - ═х эрщфхэ єърчрээ√щ ьюфєы№.
in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library 'C:/AppServ\php5\ext\p
hp_ffmpeg.dll' - ═х эрщфхэ єърчрээ√щ ьюфєы№.
in Unknown on line 0
06 Oct 2009 ROman
а у меня неможет подгрузить avcodec-51.dll
хотя он лежит в папке системс32
что делать?
06 Oct 2009 ROman
Стукните кто нибудь в асю 360974619
версия пшп 5.2.3
11 Oct 2009 Dreiton
Есть у каго нибудь под PHP 5.2.11?
24 Oct 2009 gillbeits
for PHP 5.2.5
http://gillbeits.ru/files/php_ffmpeg.dll
24 Oct 2009 gillbeits
буквально только что собрал под php 5.2.11
ffmpeg-php version 0.6.0-svn
ffmpeg-php built on Oct 24 2009 00:48:52
ffmpeg-php gd support enabled
ffmpeg libavcodec version Lavc52.10.0
ffmpeg libavformat version Lavf52.23.1
ffmpeg swscaler version SwS0.6.1
27 Oct 2009 Dreiton
Поделишься?
27 Oct 2009 gillbeits
я думаю в конце недели выложу полностью с библиотеками кодеков, просто на другой машине собирал....
31 Oct 2009 gillbeits
Начал свой блог, - там написал новую статью. Там есть под PHP 5.2.11 php_ffmpeg.
http://gillbeits.ru/programming/php/3-phpffmpeg-for-windows.html
10 Nov 2009 Lektor
gillbeits, спасибо что выложил в паблик, у меня твоя компиляция не захотела работать, не отображается в phpinfo (ставил на PHP 5.2.11 Win7 32bit) а после поставил сборку от sergey89 он работает.
12 Nov 2009 gillbeits
Lektor, у меня точно работает, смотри логи апача, и посмотри связи с библиотеками самого php_ffmgeg ибо скорее всего не хватает чего-то для работы!
11 Dec 2009 Snowcore
Установил, все нормально - классы доступны, но не могу открыть видео (ни flv, ни avi):

"Can't open movie file..."
23 Dec 2009 gillbeits
2 Snowcore: проверьте путь до файла, обычно там пишет, если путь до файла указан неверно.
01 Jan 2010 MikE
С новым годом!
Кто нибудь подскажите пожалуйста, почему в командной строке винды код может работать, а при выполнении команды из файла php, не работает.

system('T:/usr/bin/ffmpeg/ffmpeg.exe -i T:/home/users/test/video/in.flv -vhook "T:/usr/bin/ffmpeg/vhook/imlib2.dll -x 260 -y 180 -i T:/home/users/test/video/1.png" -ar 44100 T:/home/users/test/video/out.flv');


При чем нижеприведенный код работает и там и там...

system('T:/usr/bin/ffmpeg/ffmpeg.exe -i T:/home/users/test/video/in.flv -ar 22050 T:/home/users/test/video/out.flv');
09 Jan 2010 Серёга
Люди подскажите пожалуйста когда пишу так
system('T:/usr/local/ffmpeg/ffmpeg.exe -i C:/video.mp4 -an -ss 15 -r 1 -vframes 1 -s 100x100 -y -f mjpeg C:/skrin.jpg');
все работает скрин делаеться а если использую переменные
system('T:/usr/local/ffmpeg/ffmpeg.exe -i $_POST[file] -an -ss $_POST[raz_p_s] -r 1 -vframes 1 -s $_POST[raz_p_1]x$_POST[raz_p_2] -y -f mjpeg $_POST[file_p].jpg');
не работает хотя всё написал правильно подскажите если нетрудно
09 Jan 2010 Серёга
а всё я разобрался сделал так
$pic = "T:/usr/local/ffmpeg/ffmpeg.exe -i $_POST[file] -an -ss $_POST[raz_p_s] -r 1 -vframes 1 -s $_POST[raz_p_1]x$_POST[raz_p_2] -y -f mjpeg $_POST[file_p].jpg";
а сдесь убрал ковычки и вставил переменную
system($pic);
13 Jan 2010 Qw
Кто-нибудь собирал под PHP 5.3.1?
20 Jan 2010 IIopy4uK
у кого не грузится avcodec-51.dll на х64
скопируйте библитеки dll в SysWOW64
у меня все заработало
Apache/2.2.14 (Win64)
PHP Version 5.2.5
---
ffmpeg
ffmpeg support (ffmpeg-php) enabled
ffmpeg-php version 0.5.2.1
libavcodec version Lavc51.43.0
libavformat version Lavf51.12.2
ffmpeg-php gd support enabled

Directive Local Value Master Value
ffmpeg.allow_persistent 0 0
25 Jan 2010 Barth
Огромнейшее спасибо!!!
30 May 2010 katalonec
Попробовал собрать в vs2010 для php 5.3.2 - dll создалась, но php ее не загружает:

php[4120]
PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_ffmpeg.dll' - Не найден указанный модуль.
in Unknown on line 0
07 Jul 2010 LGL
TO ALL PHP Warning: PHP Startup: Unable to load dynamic library 'ext\php_ffmpeg.dll' - Не найден указанный модуль.

Перепишите файлы библиотек с коеками в System32

Имя:

Сообщение: