Autor Zpráva
residentcz
Profil
Ahojte mám problém s ffmpeg při vytváření thumbnail z MP4 videa

používám script

                    
                    $frame = 58;
                    $movie = $file.'/zaznam.mp4';
                    $thumbnail = "soubory/".$file.".png";
                   

                    $mov = new ffmpeg_movie($movie);
                    $frame = $mov->getFrame($frame);
                    if ($frame) {
                        $gd_image = $frame->toGDImage();
                        if ($gd_image) {
                            imagepng($gd_image, $thumbnail);
                            imagedestroy($gd_image);
                            }
                    }
ukázka co to dělá najdete zde
www.goldoffice.cz/e-mentor-prednasky/

porádí mi prosím někdo ?
Silver8000
Profil
residentcz:
Tak zkus pouzit tohle :

<?php
function ExtractThumb($video_in, $folder_picture_out,$time_in_seconds,$dimension){
    $thumb_stdout;
    $errors;
    $retval = 0;
$get_extension = explode('.', basename($video_in));
$extension = end($get_extension);
$get_name_for_picture = str_replace($extension,'',basename($video_in));

$picture_out = $folder_picture_out.$get_name_for_picture.'jpg';

    // Delete the file if it already exists
    if (file_exists($picture_out)) { unlink($picture_out); }

    // Use ffmpeg to generate a thumbnail from the movie

$cmd = "ffmpeg -itsoffset -4 -ss $time_in_seconds -i $video_in -vcodec mjpeg -vframes 1 -an -f rawvideo -s $dimension $picture_out  2>&1";

    exec($cmd, $thumb_stdout, $retval);

    // Queue up the error for processing
    if ($retval != 0) { $errors[] = "FFMPEG thumbnail generation failed"; }

    if (!empty($thumb_stdout))
    {
        foreach ($thumb_stdout as $line)
        {

//Info to show out
//echo $line . "\n";
        }
    }

    if (!empty($errors))
    {
        foreach ($errors as $error)
        {
//Error to show out
         //   echo $error . "\n";
        }
    }
}
?>

Nazorny priklad :
<?php
ExtractThumb('cesta/ke/slozce/video.jakykoliv-format', 'cesta/k/vystupni/slozce/','cas v sekundach','720x480');
?>
residentcz
Profil
no právě s tímto mám problém a to ten, že není povoleno exec ();

hází to chybu :-(

Warning: exec() has been disabled for security reasons

A provider mi to nepovolí...
Silver8000
Profil
A jen takovej dotaz , ty to chces delat pokazde na tom serveru nebo jen jednou za cas.
Jde o to ze pokud jen jednou za cas tak si ten obrazek vytvor doma a pak ho tam nahraj.

Stejne ti asi nic jineho nezbyde ... ja jsem taky driv mel a provozoval takove domeny kde me nechteli povolit ani prd tak jsem si pouze registroval domenu plus pres noip.com jsem si rozebehl vlastni server z domu bez nejakych omezeni protoze me to uz stvalo.
A ted pripravuji zcela nove stranky ktere budou super az se zhotoveji.Vsude kam pujdes maji zakazano exec,system,proc_open,passthru atp. z bezpecnostnich duvodu.
I kdyz existuji nejake hostingove vyjimky ktere maji tyto nektere funkce povolone prave kvuli FFMPEG protoze jsou na to nakonfigurovany.

Dal jsem ti ten kod hlavne kvuli tomu ze jsem myslel ze si to zpracovavas doma a pak to soupes na server.


jo a proc tam mas 2x hodnotu file :
$frame = 58;
                    $movie = $file.'/zaznam.mp4';
                    $thumbnail = "soubory/".$file.".png";

nemelo by to byt spis takto :

$frame = 58;
                    $movie = 'zaznam.mp4';
                    $file_name = str_replace('.'.end(explode('.',$movie)),'',$movie);
                    $thumbnail = "soubory/".$file_name.".png";

Mozna v tom bude ta chyba protoze skript nema odkud brat a tak se pokousi vytvorit obrazek z neexistujiciho souboru protoze cesta k nemu je uvedena spatne,tim padem vytvori prazdnej obrazek.

Nevim ja jen hadam jelikoz neznam jak ta trida pracuje.
residentcz
Profil
Jo chápu.. je to naprd potřebuji to automatické....

tak to se nedá nic dělat... bude to bez miniatury...

file znamená jen název složky ve které je uložen soubor zaznam.mp4
a následně to uloží do složky soubory pod názvem (názevSložky.png)

díky za rady tak nějak jsem si myslel, že to asi nepůjde jen tak...
DarkMeni
Profil
Z [#1] přspěvku sem nepochopil s čím máš vlastně problém. Jestli to nedělá to, co by mělo, nebo jestli to vypisuje nějakou chybu... to si nenapsal
Jo vlastně napsal, sorry, nevšim sem si toho obrázku u videa

residentcz:
tak to se nedá nic dělat
Možná dá, ale na server to bude asi moc zátěžově náročný. Můžeš si zjistit jak ten formát mp4 vypadá a zkusit si napsat vlastní MP4 Reader, pak z toho dostat požadovanej obrázek a pro odstíny šedý použít třeba imageFilter()

De jen o to zjistit kde je v tom souboru ten obrázek, vytáhnout si ho odtuď, vytvořit si z něj GD image a dát do odstínů šedý (IMG_FILTER_GRAYSCALE)
Ale pro php to bude docela hodně paměťově i výkonově náročný

Tak dekódování mp4 formátu je docela složitý. Zkusil sem si o tom něco zjistit a nepodařilo se mi najít ani jak takový video v mp4ce vypadá (kde sou popisný data a kde data videa, navíc komprimovaný ztrátovou kompresí). S tim vlastním MP4 Readerem sem to trochu přehnal, napsat si jen tak MPEG-4 dekodér nebude zas až taková sranda.
Ale jestli máš na serveru nainstalovnej ffmpeg-php, tak použij ten a bude stačit jen dořešit proč to nefunguje - můžeš někam dát to video, aby šlo stáhnout?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: