Страница 1 от 1

In progress: WAMP: FFMPEG + FFMPEG-PHP + Encoder - HowTo

Публикувано на: 12 Яну 2013 22:07
от error_404
МНОГО ВАЖНО УТОЧНЕНИЕ: ffmpeg-php.dll and ffmpeg.exe are NOT the same thing. ffmpeg-php is used to talk to ffmpeg.exe through php scripting. - Ако не можете да си преведете и схванете горенаписаното, то тази статия не е за вас и най добре да НЕ четете натам освен ако не страдате от хемороиди и четейки седейки си на стола облекчавате болката :evil:

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 сървъри съдържат описаните компоненти + допълнителни от авторите на даденият пакет. :mrgreen:

По известни 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 файла особено ако ще се подава HD видео:
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
Тези стойности е жалателно да си ги пипнете за да имате оптимален ефект и бързодействие, особено за многопроцесорни многонишкови системи (CPU/Threads)

Аз лично съм си добавил и в .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
3. Друг интересен инструмент, който смятам, че трябва да се има предвид със все по масовото навлизане на HTML5 и използването на video таг във уеб е ffmpeg2theora - http://v2v.cc/~j/ffmpeg2theora/index.html
С този софтуер, можем да конвертираме видео файловете в *.OGV файлов формат за последващо интегриране във уеб-сайта и по-голяма съвместимост при излъчване.

(следва продължение)

FFMPEG-PHP

Публикувано на: 12 Май 2014 08:33
от error_404
Официална страница на проекта: http://ffmpeg-php.sourceforge.net/ - Не се актуализира и всичко е в ръцете на група ентусиасти и разработчици!
Официално описание на ffmpeg-php (php_ffmpeg.dll)
ffmpeg-php is an extension for PHP that adds an easy to use, object-oriented API for accessing and retrieving information from video and audio files. It has methods for returning frames from movie files as images that can be manipulated using PHP's image functions. This works well for automatically creating thumbnail images from movies. ffmpeg-php is also useful for reporting the duration and bitrate of audio files (mp3, wma...). ffmpeg-php can access many of the video formats supported by ffmpeg (mov, avi, mpg, wmv...)
Компилирана верися с VC11 (x86/32-bit и x64/64-bit) - Apache Lounge