
FFMPEG - Швейцарското ножче за мултимедийна обработка под *NIX и други ОС.
Повечето известни енкодиращи програми: Sorenson Squeeze, VidBlaster, Wirecast, Handbrake, Fireogg, Miro Video Converter използват за BackEnd FFMPEG, което мисля е показателно на какво точно е способен.
Даже небезизвестният Rhozet Carbon Coder също ползва FFMPEG за някои задачи.
Междуплатформено независим, това е Императорът в мултимедийната обработка на всякакви файлове.
FFMPEG е внедрен, като част и от VLC (VideoLAN) небезизвестният мултимедиен плейър и стриймър, а също така и в състава на вече наложилата се мултимедийна мултиплатформена HTPC дистрибуция XBMC
FFMPEG се използва и свръхнатоварени системи за видеонаблюдение на базата на ZoneMinder
...и изобщо в основата на почти всички кодеци за Windows (FFDSHOW) стои вездесъщият FFMPEG.
Темата е в начален стадий и идеята е да се имплементира FFMPEG (Encoding/Transcoding/Streaming) под Windows OS и да се използва PHP скрипт за тази цел.
Идеята е Уеб-разработчици на ставащи все по актуални сайтове с видео съдържание да имат възможност да си настроят Развойната система и да тестват преди да пристъпят към Продукционна версия във Windows среда. (Development >> Production)
WAMP - Windows Apache MySQL PHP, като понятието при OpenServer е придобило достатъчно изменения за да му се добавят още няколко букви, но в основата си всички WAMP сървъри съдържат описаните компоненти + допълнителни от авторите на даденият пакет.

По известни WAMP Servers/Сървъри, които се използват най вече за развойна дейност (development) и тестове преди пристъпването и внедряването на дадена система в производство (production)
XAMMP
The Uniform Server
OpenServer
EasyPHP
WampServer
Впоследствие ще включа: Mencoder + Codecs + FLVTool2 - In Progress
Това ръководство е за 32-bit / x86 ОС.
За 64-bit / x64 актуализация НЕ смятам да правя.
Изтеглете следните програми/файлове/архиви
Компилиран FFMPEG за x86/32-bit и за x64/64-bit
http://sourceforge.n...2/files/FFmpeg/
http://ffmpeg.zeranoe.com/builds/ - Силно препоръчвам последните BUILD-ове предвид, че са оптимизирани и компилирани почти ежедневно.
Този компилиран пакет съдържа поддръжка pthread, т.е. -threads, работи за многонишкови процеси особено при енкодиране.
(изтеглете архива)
MENCODER (In progress)
http://sourceforge.n...er-win32/files/
(изтеглете архива)
CODECS FOR MPLAYER (in progress)
http://www1.mplayerhq.hu/MPlayer/releas ... 071007.zip
(изтеглете архива)
PHP-FFMPEG
Ето компилирани версии на PHP FFMPEG за PHP 5.4 за x86/32-bit и за x64/64-bit използваща VC9
Изключително благодадря на автора Jan Ehrhardt, който предоставя компилирана версия за този модул в PHP5
Изтегляне: http://x32.elijst.nl/ffmpeg6-php54-win32-vc9-all.zip
phpinfo: http://x32.elijst.nl/phpinfo.php54
пример: http://x32.elijst.nl/ffthumb.php54
пример: http://x32.elijst.nl:81/fftest.php54
За тези, които искат да пробват 64-bit / x64 да проверят тук:
Изтегляне: http://x64.elijst.nl:81/ffmpeg6-php54-win64-vc9-all.zip
phpinfo: http://x64.elijst.nl:81/phpinfo.php54
пример: http://x64.elijst.nl:81/ffthumb.php54
пример: http://x64.elijst.nl:81/fftest.php54
Работи перфектно с Anindya's PHP 5.4 x64:
Инфо: http://www.anindya.com/php-5-4-0-x64-64 ... r-windows/
След изтегляне на архивите следвайте долуописаните стъпки:
Спрете WAMP сървъра си.
Условно приемаме, че %WAMP_PATH% е пътя до инсталацията на Вашият WAMP сървър (XAMMP, The Uniform Server, OpenServer, EasyPHP, WampServer etc.)
1) Копирайте ffmpeg в %WAMP_PATH%\usr\local\bin\ffmpeg
2) Копирайте mencoder в %WAMP_PATH%\usr\local\bin\mencoder
3) Копирайте mplayer codecs в %WAMP_PATH%\usr\local\bin\mencoder\codecs (всички кодеци трябва да са в подпапка codec на mencoder)
4) Копирайте всички файлове от php-ffmpeg в %SystemRoot%\system32\ и в php\ext (extension folder)
Копирайте avcodec.dll & avformat.dll и всички останали *.DLL файлове от архива в %SystemRoot%\system32\
Обикновено: C:\windows\system32
Копирайте php_ffmpeg.dll в PHP5 Extensions директорията - %WAMP_PATH%\usr\local\php\extensions
5) Отворете php.ini и добавете разширение extension=php_ffmpeg.dll
php.ini се намира в %WAMP_PATH%\usr\local\php
Редът трябва да изглежда по този начин:
Код за потвърждение: Избери целия код
;extension=php_fileinfo.dll
extension=php_ffmpeg.dll
extension=php_gd2.dll
6) Рестартирайте WAMP сървъра и отидете в Административният панел
Кликнете върху phpinfo() и скролирайте докато видите зареден php-ffmpeg добавката, някъде между exif и filter
Екрана трябва да изкарва следната информация подобна на посочената по-горе.ffmpeg
ffmpeg-php version 0.6.3
ffmpeg-php built on Jul 12 2011 03:54:13
ffmpeg-php gd support enabled
ffmpeg libavcodec version Lavc52.72.2
ffmpeg libavformat version Lavf52.64.2
ffmpeg swscaler version SwS0.11.0
Directive Local Value Master Value
ffmpeg.allow_persistent 0 0
ffmpeg.show_warnings 0 0
7) Уверете се, че пътя в скриптовете Ви към ffmpeg е, като посоченият по-долу:
Когато зареждате PHP форма трябва да представите пълният път до ffmpeg (%WAMP_SERVER%/usr/local/bin/ffmpeg.exe) вместо да извиквате exec('ffmpeg')
Код за потвърждение: Избери целия код
// Set our source file
$ffmpegpath = "%WAMP_SERVER%/usr/local/bin/ffmpeg.exe";
$flvtool2path = "%WAMP_SERVER%/usr/local/bin/flvtool2/flvtool2.exe";
$input = 'file.flv';
$output = 'file.jpg';
ffmpeg-screenshot-grabber.php
Код за потвърждение: Избери целия код
<?php
if (empty($_GET['video_name'])){
echo 'error';
}
else{
$video_name = $_GET['video_name'];
$video_ext = $_GET['video_ext'];
}
// *nix ffmpeg path/usr/sbin/ffmpeg
// put the relative path to the ffmpeg.exe file for windows
$ffmpeg = 'ffmpeg\ffmpeg';
// the input video file
$video = $video_name.$video_ext;
// where you'll save the image
// define the output file
$image = 'thumbs/'.$video_name.'.jpg';
// specify the time to get the screen shot at (can easily be randomly generated)
// default time to get the image
$second = 15;
// get the duration and a random place within that
$cmd = "$ffmpeg -i $video 2>&1";
exec($cmd);
if (preg_match('/Duration: ((\d+):(\d+):(\d+))/s', `$cmd`, $time)) {
$total = ($time[2] * 3600) + ($time[3] * 60) + $time[4];
$second = rand(1, ($total - 1));
}
// get the screenshot
// finally assemble the command and execute it
$cmd = "$ffmpeg -itsoffset -$second -i $video -vcodec mjpeg -vframes 1 -an -f rawvideo -s 720x480 $image";
//$return = `$cmd`;
exec($cmd, $output);
?>
php.ini
Код за потвърждение: Избери целия код
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
max_execution_time = 6000 ; Maximum execution time of each script, in seconds
max_input_time = 6000 ; Maximum amount of time each script may spend parsing request data
memory_limit = 128M ; Maximum amount of memory a script may consume (16MB)
;;;;;;;;;;;;;;;;;
; Data Handling ;
;;;;;;;;;;;;;;;;;
; Maximum size of POST data that PHP will accept.
post_max_size = 1024M
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Maximum allowed size for uploaded files.
upload_max_filesize = 1024M
Аз лично съм си добавил и в .htaccess файла следните редове:
.htaccess
Код за потвърждение: Избери целия код
AddType video/ogg .ogv .ogm .ogg
AddType audio/ogg .oga .ogg
AddType video/mp4 .mp4
AddType video/webm .webm
AddType video/x-m4v .m4v
AddType text/x-vcard .vcf
php_value max_execution_time 6000
php_value upload_max_filesize 1024M
php_value post_max_size 1024M
php_value memory_limit 128M
При така конфигурираният .htaccess сървъра Ви ще подава коректно форматирани аудио/видео потоци към клиента/браузера/устройството
Впоследствие ще бъдат добавени следните компоненти към системата за максимална продуктивност и съвместимост.
1. Ще използваме MP4Box от (http://gpac.sourceforge.net/) за пост-продукция
Пост продукцията е наложителна защото ffmpeg запазва, така наречените moov-atoms (META информация за видео файла) в края на файла, а този род информация е нужно да бъде в началото на файла, за да даде възможност на потребителя да търси и превърта видео файла преди да се е заредил целият.
MP4Box ги премества в началото и го прави съвместим със всички стандарти вкл. и за стрийминг.
Примерно използване на MP4Box:
Код за потвърждение: Избери целия код
MP4Box -add temp.mp4 output.mp4
2. Друг инструмент, който смятам да се включи в завършеният вид на тази статия е FLVMeta (http://code.google.com/p/flvmeta/)
Това може да е заместника на flvtool2, и по мое скромно мнение може да прави същите неща по-добре от flvtool2.
Вие можете с негова помощ да remux - MP4/M4V видео файл и да го "инжектирате"/интегрирате във *.FLV видео файл.
Важно е да се знае, че е желателно вашият MP4/M4V видео файл трябва да бъде енкодиран с H.264 за видео потока и AAC за аудио потока.
Командата за "инжектиране: на FLV META-данните е много лесна, тъй като се изискват само два параметъра на входящият и изходящият файл без да се добавят допълнителни опции:
Код за потвърждение: Избери целия код
flvmeta input.flv injected_output.flv
С този софтуер, можем да конвертираме видео файловете в *.OGV файлов формат за последващо интегриране във уеб-сайта и по-голяма съвместимост при излъчване.
(следва продължение)