Création de thumbnails de vidéos uploadées, en PHP

VaN
Mammouth du PHP | 1107 Messages

06 nov. 2008, 20:27

Bonsoir la dedans,

Je souhaite pouvoir réaliser, en PHP, un thumbnail de vidéo, au moment ou celle-ci est uploadée sur le serveur.

J'ai déjà passé beaucoup de temps à chercher, à me documenter sur le sujet. A priori, la meilleure solution à l'heure actuelle est d'utiliser l'extension PHP ffmpeg, qui fait ça très bien. Le problème est que pour installer ça sur Windows, ça à l'air assez coton. (serveur local EasyPHP sous Windows) : version windows pas officiellement supportée par l'éditeur ("Sorry, I'm not a windows dude", dixit le propriétaire de l'outil : /), liens proposant une version windows morts, etc..

Alors peut être que certains d'entre vous ont déjà réalisé ce genre de fonctionnalité, et pourraient m'aiguiller.

Bref, toute aide est bienvenue pour m'aider à implémenter cette fonctionnalité.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 nov. 2008, 22:09

Bonjour,

Pour ma part, je l'ai déjà utilisé dans plusieurs projets pro, sous Linux et Windows et ça marche très bien.

Si tu veux faire des tests rapidement sans t'embêter, installe SUPER encoder il t'installera un FFmpeg fonctionnel directement dans son répertoire.
Ensuite il te suffira d'y faire appel en ligne de commande et via les fonctions PHP exec() ou system()
Quand tout le reste a échoué, lisez le mode d'emploi...

VaN
Mammouth du PHP | 1107 Messages

06 nov. 2008, 22:46

Et comment ça se passe pour que ça marche sur un serveur distant ?

On peut installer un logiciel sur un serveur distant, sans avoir un accès direct à la machine ? (juste un accès FTP).

Bon, je me bats depuis tout à l'heure avec ffpmeg et PHP :
$rPath = 'D:/Program Files/EasyPHP 2.0b1/www/Projects/2008-11 - Project/site/medias/videos/';
$command = 'D:\Program Files\eRightSoft\SUPER\ffmpeg.exe -i '.$rPath.$videoName.$extension.' -an -ss 00:00:10 -an -r 1 -vframes 1 -y '.$rPath.'a.jpg';
exec($command, $output, $return_val);
echo "\n";
echo "PATH:".$rPath.$videoName.$extension."\n";
echo "OUTPUT:".print_r($output)."\n";
echo "RETURN_VAL:".$return_val."\n";
me retourne :
PATH:D:/Program Files/EasyPHP 2.0b1/www/Projects/2008-11 - Project/site/medias/videos/24_23.avi
Array
(
)
OUTPUT:1
RETURN_VAL:1
Je ne sais pas si les "1' retournés dans les variables $output et $return_val vuelent dire Réussi ou Raté déjà.
Mais ce qui est sûr, c'est que je n'ai pas de fichier "a.jpg" dans mon dossier D:/Program Files/EasyPHP 2.0b1/www/Projects/2008-11 - Project/site/medias/videos/

Quelque chose qui cloche, à vue d'oeil ?[/quote]
Modifié en dernier par VaN le 06 nov. 2008, 23:48, modifié 2 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 nov. 2008, 23:42

Il faut que FFMPEG soit installé sur le serveur qui contient tes vidéos.
Quand tout le reste a échoué, lisez le mode d'emploi...

VaN
Mammouth du PHP | 1107 Messages

06 nov. 2008, 23:50

Ah, je viens juste d'edit mon post, donc j'imagine que t'as du louper les infos :
Bon, je me bats depuis tout à l'heure avec ffpmeg et PHP :
$rPath = 'D:/Program Files/EasyPHP 2.0b1/www/Projects/2008-11 - Project/site/medias/videos/';
$command = 'D:\Program Files\eRightSoft\SUPER\ffmpeg.exe -i '.$rPath.$videoName.$extension.' -an -ss 00:00:10 -an -r 1 -vframes 1 -y '.$rPath.'a.jpg';
exec($command, $output, $return_val);
echo "\n";
echo "PATH:".$rPath.$videoName.$extension."\n";
echo "OUTPUT:".print_r($output)."\n";
echo "RETURN_VAL:".$return_val."\n";
me retourne :
PATH:D:/Program Files/EasyPHP 2.0b1/www/Projects/2008-11 - Project/site/medias/videos/24_23.avi
Array
(
)
OUTPUT:1
RETURN_VAL:1
Je ne sais pas si les "1' retournés dans les variables $output et $return_val vuelent dire Réussi ou Raté déjà.
Mais ce qui est sûr, c'est que je n'ai pas de fichier "a.jpg" dans mon dossier D:/Program Files/EasyPHP 2.0b1/www/Projects/2008-11 - Project/site/medias/videos/

Quelque chose qui cloche, à vue d'oeil ?
Il faut que FFMPEG soit installé sur le serveur qui contient tes vidéos.
Cela veut dire que pour un test local sur EasyPHP, je dois installer le logiciel dans quelquepart dans www/ ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 nov. 2008, 00:01

Fais d'abord tous tes tests en ligne de commande (Démarrer, Exécuter, "cmd" [OK] ).
A mon avis, il va te falloir des parenthèses pour le nom de tes fichiers car les espaces c'est jamais bien acceptés dans les chemins:

Code : Tout sélectionner

"D:\Program Files\eRightSoft\SUPER\ffmpeg.exe"
Une fois que ta commande fonctionne alors essaye de la lancer via PHP.
Il faut vraiment y aller par étape :)
Quand tout le reste a échoué, lisez le mode d'emploi...

VaN
Mammouth du PHP | 1107 Messages

07 nov. 2008, 00:25

Le problème, c'est que je n'y connais absolument rien en ligne de commande (travailler sou windows, ça aide pas : / ).

Je viens d'essayer, j'arrive même pas à me placer dans le dossier contenant ffmpeg.exe.

j'essaye des
cd d:
, des
D:\Program Files\eRightSoft\SUPER
, on dirait que ça reste dans C:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 nov. 2008, 00:35

Petit détour par le site du zéro pour apprendre les bases de la ligne de commande MS-DOS: ;)
http://www.siteduzero.com/tutoriel-3-90 ... s-dos.html
Quand tout le reste a échoué, lisez le mode d'emploi...

VaN
Mammouth du PHP | 1107 Messages

07 nov. 2008, 00:46

J'ai enfin réussi à lancer ma commande :
D:\Program Files\eRightSoft\SUPER>ffmpeg -i "D:\Program Files\EasyPHP 2.0b1\www\
Projects\2008-11 - Project\site\medias\videos\22_21.avi" -an -ss 00:00:10 -an -
r 1 -vframes 1 -y "D:\Program Files\EasyPHP 2.0b1\www\Projects\2008-11 - Project\site\medias\videos\1.jpg"
qui me renvoie :
ffmpeg version 0.5.0-pre1,build 4743 Copyright (c) 2000-2005 Fabrice Bellard
configuration: --enable-mp3lame --enable-faac --enable-faad --enable-amr_nb -
-enable-amr_wb --disable-ffserver --disable-ffplay --enable-small --enable-memal
ign-hack --enable-gpl --enable-xvid --enable-dts --enable-a52 --enable-vhook --e
nable-pthread
built on Nov 13 2005 21:13:33, gcc: 3.3.1 (cygming special)
Input #0, avi, from 'D:\Program Files\EasyPHP 2.0b1\www\Projects\2008-11 - Project\site\medias\videos\22_21.avi':
Duration: 00:03:03.5, start: 0.000000, bitrate: 1937 kb/s
Stream #0.0: Video: mpeg4, 720x576, 25.00 fps
Stream #0.1: Audio: mp3, 48000 Hz, stereo, 128 kb/s
A>Unable for find a suitable output format for 'D:\Program Files\EasyPHP 2.0b1\w
ww\Projects\2008-11 - Project\site\medias\videos\1.jpg'
Recherche google qui ne donne pas grand chose : /