Et maintenant, jouons !

Comme nous l'indique la documentation de l'API, il existe 2 types d'objets avec ffmpeg-php :

  • movie qui est retourné par ffmpeg_movie(), c'est un objet contenant des méthodes permettant d'obtenir tout un tas d'informations sur le fichier courant, c'est la première fonction que nous utiliserons
  • frame renvoyé par getFrame() et getNextKeyFrame(), il s'agit là d'une image fixe extraire du flux vidéo

Commençons par obtenir des informations sur la vidéo :

<?php

$mov = new ffmpeg_movie('/path/to/video.avi');

echo sprintf('<p>Duration : %.1f, bit rate : %d, frame count : %d, video codec : %s, audio codec : %s, audio channel : %s</p>',
$mov->getDuration(),
$mov->getBitRate(),
$mov->getFrameCount(),
$mov->getVideoCodec(),
$mov->getAudioCodec(),
$mov->getAudioChannels());

?>

Qui devait afficher quelque chose comme ceci :

Duration : 18.7, bit rate : 2169054, frame count : 283, video codec : mjpeg, audio codec : pcm_u8, audio channel : 1

Essayons maintenant de lire la frame 23 et de l'envoyer au navigateur :

<?php

// On charge la vidéo
$mov = new ffmpeg_movie('/path/to/video.avi');

// Récupère la frame 23
$frame = $mov->getFrame(23);

// Transforme la frame récupérée au dessus en ressource GD
$img = $frame->toGDImage();

// Envoie l'image au navigateur
header("Content-type: image/jpeg");
imagejpeg($img);

?>

Et voilà, déconcertant de simplicité ! non ?

La suite

Ci-joint, en annexe, un petit bout de code qui vous affichera les informations sur la vidéo, créera 50 miniatures et affichera enfin la vidéo convertie en animation GIF.
Un aperçu du résultat :

ffmpeg-php au boulot

Amusez-vous bien !