swf vers flv avec ffmpeg php

  • Auteur de la discussion Auteur de la discussion datch
  • Date de début Date de début
WRInaute impliqué
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
 
WRInaute impliqué
je serais assez curieux de lire le résultat de :
Code:
echo $ffmpeg_cli;
exit;
et ensuite de le rejouer en ligne de commande avec le user de ton apache...
 
WRInaute impliqué
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?
 
WRInaute impliqué
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:
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
 
WRInaute impliqué
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...
 
WRInaute impliqué
bah déplace le après ta ligne de commande et remplace par
Code:
if(is_object($mediaObj = new ffmpeg_movie($target_name) ))
 
WRInaute impliqué
c'est un peu chaud de le deplacer comme ca non?

Code:
// 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...
 
WRInaute impliqué
oui parfois découpé le code en fonction ca aide en lisibilité ;) sinon je le verrais comme ceci :
Code:
<?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);
?>
 
WRInaute impliqué
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
 
WRInaute occasionnel
Question bête : la conversion en passant directement en ligne de commande fonctionne-t-elle ?
 
WRInaute impliqué
en ligne de commande je ne sais pas , mais j'arrive a convertir d'autre format que le swf...
 
WRInaute impliqué
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:
$media_path = "../videos";
par
Code:
$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:
/usr/local/bin/ffmpeg --formats | grep swf
?
 
WRInaute impliqué
pour ca
Code:
/usr/local/bin/ffmpeg --formats | grep swf

c'est a faire en ssh sur le serveur ?
 
WRInaute impliqué
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?
 
WRInaute impliqué
non normalement le code fait générer à ffmpeg un flv que tu ouvres ensuite via l'objet ffmpeg_movie
remplace alors
Code:
$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:
/usr/local/bin/ffmpeg -formats | grep swf
 
WRInaute impliqué
en faites le dossier videos c'est le dossier ou sont stocké les videos non encoder et medias c'est le dossier ou sont deplacer les flv

je test pour le ssh
 
WRInaute impliqué
ok d'autre part on me dit que depuis flash 6, les swf sont quasiment tous compressé, donc pas good pour toi :-(
 
WRInaute impliqué
j'ai fait la commande shh

Code:
# /usr/local/bin/ffmpeg -formats | grep swf
FFmpeg version SVN-r7159, Copyright (c) 2000-2006 Fabrice Bellard, et al.
  configuration:  --enable-mp3lame --enable-libogg --enable-vorbis --enable-faadbin --enable-xvid --enable-a52 --enable-a52bin --enable-pp --enable-shared --enable-gpl 
  libavutil version: 49.1.0
  libavcodec version: 51.25.0
  libavformat version: 51.6.0
  built on Nov 23 2006 16:59:54, gcc: 4.0.2 20051125 (Red Hat 4.0.2-8)
 DE swf             Flash format
 DEA    adpcm_swf

qu'en penses tu?
merci d'avance
 
WRInaute impliqué
que tu as bien le support swf et que ta version à moins de 6 mois

essaye
Code:
/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 toto.flv

tu devrais vite être fixé sur la faisabilté :)
 
WRInaute impliqué
voila le résultat.


FFmpeg version SVN-r7159, Copyright (c) 2000-2006 Fabrice Bellard, et al.
configuration: --enable-mp3lame --enable-libogg --enable-vorbis --enable-faadbin --enable-xvid --enable-a52 --enable-a52bin --enable-pp --enable-shared --enable-gpl
libavutil version: 49.1.0
libavcodec version: 51.25.0
libavformat version: 51.6.0
built on Nov 23 2006 16:59:54, gcc: 4.0.2 20051125 (Red Hat 4.0.2-8)
[swf @ 0x4d2a40]No media found in SWF
/var/www/vhosts/video-formation.fr/httpdocs/videos/test.swf: I/O error occured
Usually that means that input file is truncated and/or corrupted.
 
Discussions similaires
Haut