ffmpeg-php + PHP5

Skat0r

Grünschnabel
Hallo,

ich habe ein kleines Problem mit der FFMPEG-PHP erweiterung. Soweit funktioniert das ganze eigentlich lediglich das beim erstellen eines Screenshots eines Frames bricht er ab und bringt folgenden Fehler.

Fatal error: failed to convert frame to gd image in ... On line 8

Der passende PHP Code dazu:

PHP:
<?php
$frame = 73;
$mov = new ffmpeg_movie(dirname(__FILE__) . '/test_media/robot.avi');
$img = sprintf("%s/test-%04d.png", dirname(__FILE__), $frame);

$ff_frame = $mov->getFrame($frame);
if ($ff_frame) {
    $gd_image = $ff_frame->toGDImage();
    if ($gd_image) {
        imagepng($gd_image, $img);
        imagedestroy($gd_image);
        // generate md5 of file (NOTE: different versions of ffmpeg may produce different
        // md5 hashes since resampling has been changed slightly due to a fix. Need to
        // use EXPECTREX to test for both md5 possibilities.
        printf("ffmpeg getFrame(): md5 = %s\n", md5(file_get_contents($img)));
        unlink($img);
    }
}
?>

Zeile 8 wäre dann $gd_image = $ff_frame->toGDImage(); . Bis auf das funktionieren eigentlich alle Funktionen von ffmpeg-php. Ich habe es auch schon mit verschiedenen anderen Versionen probiert aber bisher leider ohne Erfolg.

Noch ein Auszug aus der phpinfo:

ffmpeg
ffmpeg-php version 0.6.0-svn
ffmpeg-php built on Oct 30 2008 15:45:14
ffmpeg-php gd support enabled
ffmpeg libavcodec version Lavc52.1.0
ffmpeg libavformat version Lavf52.23.1
ffmpeg swscaler disabled

gd
GD Support enabled
GD Version 2.0 or higher
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.2.1
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled

Ich hab auch schon gegoogelt und in der entsprechenden goolge Code Group geschaut aber bisher keine wirkliche Lösung gefunden. Ich hoffe ihr könnt mir da vllt. weiter helfen :/
 
Die Funktion steckt in der ffmpeg_movie Klasse (Von ffmpeg-php) welches als php Extension geladen wurde. Sprich schon kompiliert ist ;)
 
Ach, erst denken, dann posten.. *wallbash*
Sorry :)

Der Aufruf und der vorhergehende Code ist laut API korrekt.

PHP-Version >= 4.3.0?
Eher unwahrscheinlich, dass das Problem hier liegt, aber ausgeschlossen wurde es noch nicht.
 
Wie im Titel steht arbeite ich mit PHP 5 um genau zusein mit "PHP Version 5.2.0-8+etch11"

Und ja, der Code sollte eigentlich stimmen. Ist 1zu1 aus deren Beispiel übernommen (Zum testen eben). Aber leider kommt dort dann halt jener Fehler der mich ein wenig verzweifeln lässt da alle anderen Funktionen gehen.
 
Ich denke die Funktion kommt mit den Framenummer nicht klar. Probiere es mal so, Pfade mußt du natürlich anpassen, ich habe es nur aus meiner Klasse rausgerissen ;). Wenn es klappt sollstest du ein Bild aus der Mitte des Videos bekommen.

PHP:
if ($ff_frame) {
  $mov_img = new ffmpeg_movie(PFAD_ABSOLUT_ZUM_VIDEO);
   $framenumber = ($mov_img->getFrameCount() / 200) + 2;
   $ff_frame = $mov_img->getFrame($framenumber);
   $ff_frame->resize($mov_img->getFrameWidth(), $mov_img->getFrameHeight(), 10, 10, 10, 10);
    $gd_image = $ff_frame->toGDImage();
    if ($gd_image) {
       $img = 'Pfad zum Bild';
        imagepng($gd_image, $img);
        imagedestroy($gd_image);
        // generate md5 of file (NOTE: different versions of ffmpeg may produce different
        // md5 hashes since resampling has been changed slightly due to a fix. Need to
        // use EXPECTREX to test for both md5 possibilities.
        printf("ffmpeg getFrame(): md5 = %s\n", md5(file_get_contents($img)));
        unlink($img);
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Kommt leider der gleiche Fehler :/ Auf die Idee bin ich ja auch schon gekommen und habe von frame 1 bis ~200 alles durch probiert. Aber leider immer ohne Erfolg.

Das ist echt ärgerlich den diese Screenshot funktion ist eigentlich das einzige was ich aus der Erweiterung wirklich brauche :(
 
Hmm bei mir geht es, hier mal der Link zum Bugtracker von PHP-FFmpeg, der führt genau zu deinen Problem.
 
Hast du die Zeilen in deinen Programm? Sonst wird es natürlich nichts ;), wichtig sind die letzen beiden.

PHP:
extension_loaded('ffmpeg') or die("skip ffmpeg extension not loaded"); 
extension_loaded('gd') or die("skip gd extension not avaliable.");
function_exists("imagecreatetruecolor") or die("skip function imagecreatetruecolor unavailable");
 
Zurück