swf vers flv avec ffmpeg php

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

swf vers flv avec ffmpeg php

Message le Mer Mai 02, 2007 9:52

bonjour,

je cherche un tuto ou quelqu'un qui pourrait me renseigner pour encoder du swf et mov vers flv avec ffmpeg php sur mon site www.

je precise ffmpeg est deja installer, il marche trés bien avec d'autres formats.

en faite voila ma ligne de commande :

PHP:
$ffmpeg_cli = "$ffmpeg_path -i $fullpath -acodec mp3 -b 800k -er 4 -ar 22050 -f flv -s 640x480 -y $target_name";



donc je pense que c'est la meme chose que ma ligne en un peu plus compliqué...

et le resultat ca donne ca :


PHP:
Warning: Can't open movie file ../videos/test.swf in /var/www/vhosts/monsite.fr/httpdocs/admin/valid_video.php on line 55
Nom du média : test.swf (../videos/test.swf)
ERREUR : impossible d'instancier FFMPEG / Media invalide


Merci d'avance


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 10:23

je serais assez curieux de lire le résultat de :
Code: Tout sélectionner
echo $ffmpeg_cli;
exit;

et ensuite de le rejouer en ligne de commande avec le user de ton apache...


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 10:42

merci de ta réponse

je n'arrive pas à lire la ligne de commande

je pense que c un if qui bloc

edit : if(is_object($mediaObj = new ffmpeg_movie($fullpath) ))

le else qui correspond à ce if est:
ERREUR : impossible d'instancier FFMPEG / Media invalide

qu'en penses tu?
Dernière édition par datch le Mer Mai 02, 2007 11:01, édité 1 fois.


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 10:59

en faite je ne comprend pas un truc, si tu veux convertir du swf en flv c'est un appel system à ffmpeg qu'il faut que tu fasses :
Code: Tout sélectionner
system( $ffmpeg_cli );

l'extension ffmpeg-php me semble t-il n'est pas là pour ca, et ne semble pas prévu pour fonctionner avec un format d'entrée swf


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 11:04

en faite ma ligne de commande de ffmpeg est dans un if, et c'est ce if qui bloque c'est pour ca que je ne peux pas afficher le echo"ffmpeg_cli";

ce if c'est : if(is_object($mediaObj = new ffmpeg_movie($fullpath) ))
(je m'etais trompé sur le post d"en haut)

je ne comprends pas a quoi correespond ce if mais c'est lui qui me fait apparaitre la phrase : ERREUR : impossible d'instancier FFMPEG / Media invalide

et qui m'empeche d'arriver a ma ligne de commande...


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 11:08

bah déplace le après ta ligne de commande et remplace par
Code: Tout sélectionner
if(is_object($mediaObj = new ffmpeg_movie($target_name) ))


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 11:13

c'est un peu chaud de le deplacer comme ca non?

Code: Tout sélectionner
// RecupÈration d'info
$id=$_GET["id"];

$requete = mysql_query("SELECT * FROM liste_video WHERE id='$id'");

$row = mysql_fetch_assoc($requete);

//rÈcupÈre nom  video et image
$media=$row['video'];   

// dÈfinition de la collection de medias
$media_path = "../videos";

// Confirme que l'extension est presente
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;
if (!extension_loaded('ffmpeg')) {
   dl($extension_soname) or die("Impossible de trouver l'extension: $extension_fullname\n");
}

/**
* Traitements
* - on parcourt le repertoire,
* - on ouvre le mÈdia,
* - on test le mÈdia (type)
* - on extrait des informations
*/
$HTML ='';
if(is_dir($media_path) && $dir = opendir($media_path))
{
       //$media = readdir($dir);
   
   
         $fullpath = $media_path.'/'.$media;
         $HTML .= "<b> Nom du mÈdia : $media ($fullpath) </b>\n";

         
         // Instanciation de ffmpeg_movie
         if(is_object($mediaObj = new ffmpeg_movie($fullpath) ))
         {
            
            //**
             //* FFMPEG-PHP est normalement destinÈ ‡ trater des vidÈos.
             //* Mais les mÈthodes fournies permettent d'Èlargir aux fichiers audios si on considere qu'un fichier audio
            // * est une vidÈo sans codec video mais avec codec audio ;)
            // */
            if($videoCodec = $mediaObj->getVideoCodec())
            {
               $HTML .= "<li> Le fichier est un fichier vidÈo \n";
               $HTML .= "<li> Codec Video : ".$videoCodec;
               $HTML .= "<li> Codec Audio : ".$mediaObj->getAudioCodec();
               $HTML .= "<li> Duree : ".$mediaObj->getDuration();
               $HTML .= "<li> Taille : ".$mediaObj->getFrameHeight()."x".$mediaObj->getFrameWidth();
               $HTML .= "<li> BitRate : ".$mediaObj->getBitRate();
               
               /**
                * -------------------------------------------------------------------------------------------------
                * ENCODAGE
                * Si le fichier est une vidÈo valide,
                * - nous allons lancer l'encodage via ffmpeg (en ligne de commande)
                * - l'encodage se fera en FLV,
                * -------------------------------------------------------------------------------------------------
                */
               
               // Construction de la ligne de commande
               $flv_path = "../medias";
               $ffmpeg_path = "/usr/local/bin/ffmpeg";
               $newmedia = substr($media, 0, -4);
               $newjpg = $id.'.jpg';
               $newmedia = $id.'.flv';
               
               $target_name = preg_replace('/ /','_',$flv_path.'/'.$newmedia);
               $target_jpg = preg_replace('/ /','_',$flv_path.'/'.$newjpg);
         
                    $ffmpeg_cli = "$ffmpeg_path -i $fullpath -acodec mp3  -b 800k  -er 4  -ar 22050 -f flv -s 640x480 -y $target_name";
               
            //$ffmpeg_cli = "$ffmpeg_path -i $fullpath -acodec mp3 -ab 32 -f flv -s 640x480 -ar 22050   -b 800k -r 15 -y $target_name";


$mov = new ffmpeg_movie ( $fullpath, false );
$frame = 10;
$mini_frame = $mov->getFrame($frame);
if( $mini_frame ) {
     $image = $mini_frame ->toGDImage();
     if( $image ) {
            imagejpeg($image, $target_jpg );
            imagedestroy($image);
     }
}







               //print `$ffmpeg_cli`;
               $HTML .= "<li> commande : $ffmpeg_cli \n";
               //$HTML .= "<li> commande : $ffmpeg_cli2 \n";
               passthru($ffmpeg_cli,$res);
               if(!$res){
                  $HTML .= " **********************************************************\n";
                  $HTML .= " ****************  cliquez sur suivant ********************\n";
                  $HTML .= " **********************************************************\n";
                  $HTML .= " **********************************************************\n";
                  $HTML .= " <a href=\"http://www.video-formation.fr/medias/redimension2.php?img=$newjpg\">Suivant</a>\n";
                  $HTML .= " **********************************************************\n";
                  $HTML .= " **********************************************************\n";
                  $validation=mysql_query("UPDATE liste_video SET valid=1,video='$newmedia',image='$newjpg' WHERE id=$id");
                  if(!$validation) die('RequÍte invalide dans la base de donnÈe : ' . mysql_error());
                  mysql_close();
                  $source_file="/var/www/vhosts/video-formation.fr/httpdocs/videos/";
                  unlink($source_file.$media);//effacement du fichier   
               }
               else
               {
                   $HTML .= "<li> Erreur lors de l'encodage $target_name\n";
               }
               // -------------------------------------------------------------------------------------------------
               
            }
            else
            {
               $HTML .= "<b> PROBLEME </b> : le fichier n'a ni audio ni frames valides";
            }
            
            $HTML .= "\n\n";
         } else {
                 $HTML .= "<b> ERREUR </b> : impossible d'instancier FFMPEG / Media invalide \n";
                }
         
      
   
}
else echo "trouve pas le rep";

print nl2br($HTML);



regarde le pavé de code...


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 11:22

oui parfois découpé le code en fonction ca aide en lisibilité ;) sinon je le verrais comme ceci :
Code: Tout sélectionner
<?php
// RecupÈration d'info
$id=$_GET["id"];

$requete = mysql_query("SELECT * FROM liste_video WHERE id='$id'");

$row = mysql_fetch_assoc($requete);

//rÈcupÈre nom  video et image
$media=$row['video'];   

// dÈfinition de la collection de medias
$media_path = "../videos";

// Confirme que l'extension est presente
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;
if (!extension_loaded('ffmpeg')) {
   dl($extension_soname) or die("Impossible de trouver l'extension: $extension_fullname\n");
}

/**
* Traitements
* - on parcourt le repertoire,
* - on ouvre le mÈdia,
* - on test le mÈdia (type)
* - on extrait des informations
*/
$HTML ='';
if(is_dir($media_path) && $dir = opendir($media_path))
{
       //$media = readdir($dir);
   
   
         $fullpath = $media_path.'/'.$media;
         $HTML .= "<b> Nom du mÈdia : $media ($fullpath) </b>\n";

         /**
                * -------------------------------------------------------------------------------------------------
                * ENCODAGE
                * Si le fichier est une vidÈo valide,
                * - nous allons lancer l'encodage via ffmpeg (en ligne de commande)
                * - l'encodage se fera en FLV,
                * -------------------------------------------------------------------------------------------------
                */
               
               // Construction de la ligne de commande
               $flv_path = "../medias";
               $ffmpeg_path = "/usr/local/bin/ffmpeg";
               $newmedia = substr($media, 0, -4);
               $newjpg = $id.'.jpg';
               $newmedia = $id.'.flv';
               
               $target_name = preg_replace('/ /','_',$flv_path.'/'.$newmedia);
               $target_jpg = preg_replace('/ /','_',$flv_path.'/'.$newjpg);
         
                    $ffmpeg_cli = "$ffmpeg_path -i $fullpath -acodec mp3  -b 800k  -er 4  -ar 22050 -f flv -s 640x480 -y $target_name";
               
            //$ffmpeg_cli = "$ffmpeg_path -i $fullpath -acodec mp3 -ab 32 -f flv -s 640x480 -ar 22050   -b 800k -r 15 -y $target_name";
           
               //print `$ffmpeg_cli`;
               $HTML .= "<li> commande : $ffmpeg_cli \n";
               //$HTML .= "<li> commande : $ffmpeg_cli2 \n";
               passthru($ffmpeg_cli,$res);
               if(!$res){
                  $HTML .= " **********************************************************\n";
                  $HTML .= " ****************  cliquez sur suivant ********************\n";
                  $HTML .= " **********************************************************\n";
                  $HTML .= " **********************************************************\n";
                  $HTML .= " <a href=\"http://www.video-formation.fr/medias/redimension2.php?img=$newjpg\">Suivant</a>\n";
                  $HTML .= " **********************************************************\n";
                  $HTML .= " **********************************************************\n";
                  $validation=mysql_query("UPDATE liste_video SET valid=1,video='$newmedia',image='$newjpg' WHERE id=$id");
                  if(!$validation) die('RequÍte invalide dans la base de donnÈe : ' . mysql_error());
                  mysql_close();
                  $source_file="/var/www/vhosts/video-formation.fr/httpdocs/videos/";
                  unlink($source_file.$media);//effacement du fichier   
               }
               else
               {
                   $HTML .= "<li> Erreur lors de l'encodage $target_name\n";
               }

         // Instanciation de ffmpeg_movie
         if(is_object($mediaObj = new ffmpeg_movie($target_name) ))
         {
           
            //**
             //* FFMPEG-PHP est normalement destinÈ ‡ trater des vidÈos.
             //* Mais les mÈthodes fournies permettent d'Èlargir aux fichiers audios si on considere qu'un fichier audio
            // * est une vidÈo sans codec video mais avec codec audio ;)
            // */
            if($videoCodec = $mediaObj->getVideoCodec())
            {
               $HTML .= "<li> Le fichier est un fichier vidÈo \n";
               $HTML .= "<li> Codec Video : ".$videoCodec;
               $HTML .= "<li> Codec Audio : ".$mediaObj->getAudioCodec();
               $HTML .= "<li> Duree : ".$mediaObj->getDuration();
               $HTML .= "<li> Taille : ".$mediaObj->getFrameHeight()."x".$mediaObj->getFrameWidth();
               $HTML .= "<li> BitRate : ".$mediaObj->getBitRate();
               

               // -------------------------------------------------------------------------------------------------
$mov = new ffmpeg_movie ( $target_name, false );
$frame = 10;
$mini_frame = $mov->getFrame($frame);
if( $mini_frame ) {
     $image = $mini_frame ->toGDImage();
     if( $image ) {
            imagejpeg($image, $target_jpg );
            imagedestroy($image);
     }
}








               
            }
            else
            {
               $HTML .= "<b> PROBLEME </b> : le fichier n'a ni audio ni frames valides";
            }
           
            $HTML .= "\n\n";
         } else {
                 $HTML .= "<b> ERREUR </b> : impossible d'instancier FFMPEG / Media invalide \n";
                }
         
     
   
}
else echo "trouve pas le rep";

print nl2br($HTML);
?>


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 12:06

bon alors avec ton code je me retrouve avec :


Warning: Can't open movie file ../medias/519.flv in /var/www/vhosts/video-formation.fr/httpdocs/admin/valid_video.php on line 101
Nom du média : test.swf (../videos/test.swf)
# commande : /usr/local/bin/ffmpeg -i ../videos/test.swf -acodec mp3 -b 800k -er 4 -ar 22050 -f flv -s 640x480 -y ../medias/519.flv
# Erreur lors de l'encodage ../medias/519.flv
ERREUR : impossible d'instancier FFMPEG / Media invalide


nalrem
WRInaute impliqué
WRInaute impliqué
 
Messages: 392
Inscription: Dim Avr 06, 2003 21:44

Message le Mer Mai 02, 2007 12:10

Question bête : la conversion en passant directement en ligne de commande fonctionne-t-elle ?


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 12:12

en ligne de commande je ne sais pas , mais j'arrive a convertir d'autre format que le swf...


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 12:56

chez moi avec une install via yum et avec ta ligne de commande j'obtiens :
[swf @ 0x56651a8]Compressed SWF format not supported

et ceci avec plein de swf trouvé sur le web, après je sais pas trop ce que cela veut dire

sinon pour l'erreur change le
Code: Tout sélectionner
$media_path = "../videos";

par
Code: Tout sélectionner
$media_path = "/var/www/vhosts/video-formation.fr/httpdocs/videos";

donne les droits nécessaires aussi au rép pour le user apache

et enfin que donne
Code: Tout sélectionner
/usr/local/bin/ffmpeg --formats | grep swf

?


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 13:00

pour ca
Code: Tout sélectionner
/usr/local/bin/ffmpeg --formats | grep swf


c'est a faire en ssh sur le serveur ?


datch
WRInaute passionné
WRInaute passionné
 
Messages: 967
Inscription: Ven Juin 16, 2006 10:43

Message le Mer Mai 02, 2007 13:05

pour $media_path j'ai remplcé :


Warning: Can't open movie file ../medias/519.flv in /var/www/vhosts/video-formation.fr/httpdocs/admin/valid_video.php on line 101
Nom du média : test.swf (/var/www/vhosts/video-formation.fr/httpdocs/videos/test.swf)
# commande : /usr/local/bin/ffmpeg -i /var/www/vhosts/video-formation.fr/httpdocs/videos/test.swf -acodec mp3 -b 800k -er 4 -ar 22050 -f flv -s 640x480 -y ../medias/519.flv
# Erreur lors de l'encodage ../medias/519.flv
ERREUR : impossible d'instancier FFMPEG / Media invalide


par contre je me demande si dans le code que tu m'as donné tu n'essaye pas d'ouvrir le .flv alors qu'il n'existe pas ??
peut etre que je me trompe... tu en pense quoi?


julienr
WRInaute passionné
WRInaute passionné
 
Messages: 866
Inscription: Mar Aoû 05, 2003 14:49

Message le Mer Mai 02, 2007 13:11

non normalement le code fait générer à ffmpeg un flv que tu ouvres ensuite via l'objet ffmpeg_movie
remplace alors
Code: Tout sélectionner
$flv_path = "/var/www/vhosts/video-formation.fr/httpdocs/medias";


et sinon il te faudra te connecter en ssh sur le serveur pour essayer les commandes à la main...

rectif la commande est plus précisément :
Code: Tout sélectionner
/usr/local/bin/ffmpeg -formats | grep swf

swf vers flv avec ffmpeg php

Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités