Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASSE FFMPEG DE GESTION DE VIDÉOS


Information sur la source

Catégorie :Class et Objet ( POO ) Classé sous : ffmpeg, encodage, vidéo, classe, yaug Niveau : Expert Date de création : 03/01/2008 Vu : 8 751

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (39)
Ajouter un commentaire et/ou une note

Description

Suite à une ancienne source j'ai souhaité reprendre complètement celle ci et la transformer en classe permettant de gérer des vidéos grâce à ffmpeg.

Qu'est ce que ffmpeg ?

C'est une bibliothèque linux (développée depuis aussi sur windows) servant à gérer les flux audio et vidéo. Cela permet notamment l'encodage de vidéos au format flv, le redimensionnement de vidéos...
La documentation officielle de ffmpeg se trouve ici : http://ffmpeg.mplayerhq.hu/
Afin de vous aider dans votre manipulation de ffmpeg, je vous conseil ce blog : http://www.jcartier.net/spip.php?article36
Pour les fanas de windows, ma source demandera quelques adaptation, mais vous pourrez trouver ffmpeg pour windows à cet endroit : http://chroniques-lunaires.com/rsc/ffmpeg.zip et n'hésitez pas à vous reporter à cette documentation : http://urzhiata.emoc.org/comment-installer-ffmpeg-avec-windows-xp.

Comment utiliser cette source?

Voici quelques petits exemples :

- Créer un fichier au format flv à partir d'une vidéo
$Video = new Video("test.avi");
$Video->set_encoding_vformat("flv");
$Video->set_encoding_afreq("44100");
$Video->encode("test.flv");

- Fixer la durée d'une vidéo
$Video = new Video("test.avi");
$Video->set_encoding_duration("00:00:10"); // fixe la durée maximum à 10 secondes
$Video->encode("test2.avi");

- Fixer les dimensions d'une vidéo
$Video = new Video("test.avi");
$Video->set_encoding_vsize("300x200"); // Redimensionne en 300px par 200px
$Video->encode("test2.avi");

- Extraire une image de la vidéo
$Video = new Video("test.avi");
$Video->get_image("10","vignette.jpg","300x200");

 

Source

  • <?php
  • /*
  • * @ name : video.php
  • * @ description : a class used to encode, decode, resize and reformat videos...
  • * @ author : Yaug - Manuel Esteban
  • * @ contact : yaug@caramail.com
  • * @ date : 03/01/2008
  • */
  • class Video{
  • public $video_file, $duration, $bitrate, $video_format, $audio_format,
  • $video_size, $video_fps, $audio_freq, $audio_bitrate,
  • $encoding_vformat, $encoding_aformat, $encoding_vcodec, $encoding_acodec,
  • $encoding_vsize, $encoding_duration, $encoding_afreq, $encoding_target,
  • $encoding_packet_size, $encoding_aspect, $encoding_ac, $encoding_bitrate,
  • $encoding_abitrate, $encoding_fps, $encoding_time_position, $encoding_nosound;
  • private $video_id;
  • /*
  • * function : __construct
  • * @description : Constructor
  • * @param : $video
  • */
  • public function __construct($video){
  • $this->video_file = $video;
  • $this->video_id = md5($video);
  • //On récupère les infos de la vidéo
  • exec("ffmpeg -i ".$this->video_file." &> ".$this->video_id.".info");
  • $this->get_video_info();
  • }
  • /*
  • * function : __destruct
  • * @description : Destructor
  • * @param :
  • */
  • public function __destruct(){
  • if( is_file($this->video_id.".info") ) unlink($this->video_id.".info");
  • }
  • /*
  • * function : getextension
  • * @description : return the extension of any file
  • * @param : $file - name of the file (video.avi)
  • */
  • public function getextension($file){
  • return substr($file,strrpos($file,'.')+1);
  • }
  • /*
  • * function : get_video_info
  • * @description : Extract all the video information with ffmpeg
  • */
  • private function get_video_info(){
  • $handle = fopen($this->video_id.".info","r");
  • if($handle){
  • while (!feof($handle)) {
  • $buffer = fgets($handle, 4096);
  • $Line=explode(" ",$buffer);
  • //print_r($Line);
  • //print("\n");
  • switch($Line[2]){
  • case 'Duration:':
  • $this->duration = $Line[3];
  • $this->bitrate = $Line[7];
  • case 'Stream':
  • if($Line[4]=="Video:"){
  • $this->video_format = $Line[5];
  • $this->video_size = $Line[7];
  • $this->video_fps = $Line[8];
  • }elseif($Line[4]=="Audio:"){
  • $this->audio_format = $Line[5];
  • $this->audio_freq = $Line[6];
  • $this->audio_bitrate= $Line[9];
  • }
  • }
  • }
  • fclose($handle);
  • return true;
  • }
  • return false;
  • }
  • /*
  • * function : set_encoding_vformat()
  • * @description : Set the format for video encoding
  • * @param : $format (the format of the output video)
  • */
  • public function set_encoding_vformat($format){
  • $this->encoding_vformat = $format;
  • }
  • /*
  • * function : set_encoding_aformat()
  • * @description : Set the format for audio encoding
  • * @param : $format (the format of the output audio)
  • */
  • public function set_encoding_aformat($format){
  • $this->encoding_aformat = $format;
  • }
  • /*
  • * function : set_encoding_vcodec()
  • * @description : Set the codec for video encoding, be carefull with the codec name
  • * @param : $codec (the codec of the output video)
  • */
  • public function set_encoding_vcodec($codec){
  • $this->encoding_vcodec = $codec;
  • }
  • /*
  • * function : set_encoding_acodec()
  • * @description : Set the codec for audio encoding, be carefull with the codec name
  • * @param : $codec (the codec of the output audio)
  • */
  • public function set_encoding_acodec($codec){
  • $this->encoding_acodec = $codec;
  • }
  • /*
  • * function : set_encoding_vsize()
  • * @description : Set the size of the output video
  • * @param : $width (width of the output video)
  • * @param : $height (height of the output video)
  • */
  • public function set_encoding_vsize($size){
  • $this->encoding_vsize = $size;
  • }
  • /*
  • * function : set_encoding_duration()
  • * @description : Set the size of the output video
  • * @param : $duration (duration of the output like 00:00:10)
  • */
  • public function set_encoding_duration($duration){
  • $this->encoding_duration = $duration;
  • }
  • /*
  • * function : set_encoding_afreq()
  • * @description : Set the audio frequence of the output video
  • * @param : $freq (audio frequence of the output like 00:00:10)
  • */
  • public function set_encoding_afreq($freq){
  • $this->encoding_afreq = $freq;
  • }
  • /*
  • * function : set_encoding_target()
  • * @description : Specify target file type
  • * @param : $target (Specified target file type)
  • */
  • public function set_encoding_target($target){
  • $this->encoding_target = $target;
  • }
  • /*
  • * function : set_encoding_packet_size()
  • * @description : Set packet size in bits.
  • * @param : $weight (Size)
  • */
  • public function set_encoding_packet_size($weight){
  • $this->encoding_packet_size = $weight;
  • }
  • /*
  • * function : set_encoding_aspect()
  • * @description : Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777).
  • * @param : $ratio (Ratio of the generated video)
  • */
  • public function set_encoding_aspect($ratio){
  • $this->encoding_aspect = $ratio;
  • }
  • /*
  • * function : set_encoding_ac()
  • * @description : Set the number of audio channels
  • * @param : $nb (Number of channels)
  • */
  • public function set_encoding_ac($nb){
  • $this->encoding_ac = $nb;
  • }
  • /*
  • * function : set_encoding_bitrate()
  • * @description : Set the video bitrate in bit/s
  • * @param : $bitrate
  • */
  • public function set_encoding_bitrate($bitrate){
  • $this->encoding_bitrate = $bitrate;
  • }
  • /*
  • * function : set_encoding_abitrate()
  • * @description : Set the audio bitrate in bit/s
  • * @param : $abitrate
  • */
  • public function set_encoding_abitrate($abitrate){
  • $this->encoding_abitrate = $abitrate;
  • }
  • /*
  • * function : set_encoding_fps()
  • * @description : Set frame rate
  • * @param : $fps
  • */
  • public function set_encoding_fps($fps){
  • $this->encoding_fps = $fps;
  • }
  • /*
  • * function : set_encoding_time_position()
  • * @description : time position in seconds. hh:mm:ss[.xxx] syntax is also supported.
  • * @param : $position
  • */
  • public function set_encoding_time_position($position){
  • $this->encoding_time_position = $position;
  • }
  • /*
  • * function : set_encoding_nosound()
  • * @description : time position in seconds. hh:mm:ss[.xxx] syntax is also supported.
  • * @param : $position
  • */
  • public function set_encoding_nosound(){
  • if($this->encoding_nosound)$this->encoding_nosound=false;
  • else $this->encoding_nosound=true;
  • }
  • /*
  • * function : encode()
  • * @description : Encode video with defined params
  • * @param : $file_name (name of the file created.)
  • */
  • public function encode($file_name){
  • $command = "ffmpeg -y -i ".$this->video_file;
  • if($this->encoding_vformat) $command.=" -f ".$this->encoding_vformat;
  • if($this->encoding_vcodec) $command.=" -vcodec ".$this->encoding_vcodec;
  • if($this->encoding_acodec) $command.=" -acodec ".$this->encoding_acodec;
  • if($this->encoding_vsize) $command.=" -s ".$this->encoding_vsize;
  • if($this->encoding_duration) $command.=" -t ".$this->encoding_duration;
  • if($this->encoding_fps) $command.=" -r ".$this->encoding_fps;
  • if($this->encoding_bitrate) $command.=" -b ".$this->encoding_bitrate;
  • if($this->encoding_nosound) $command.=" -an ";
  • if($this->encoding_abitrate) $command.=" -ab ".$this->encoding_abitrate;
  • if($this->encoding_afreq) $command.=" -ar ".$this->encoding_afreq;
  • if($this->encoding_ac) $command.=" -ac ".$this->encoding_ac;
  • if($this->encoding_target) $command.=" -target ".$this->encoding_target;
  • if($this->encoding_packet_size) $command.=" -ps ".$this->encoding_packet_size;
  • if($this->encoding_aspect) $command.=" -aspect ".$this->encoding_aspect;
  • if($this->encoding_time_position) $command.=" -ss ".$this->encoding_time_position;
  • $command.=" $file_name";
  • print("commande executée : $command");
  • shell_exec($command);
  • }
  • /*
  • * function : get_image()
  • * @description : Get an image for a specific frame of a video
  • * @param : $frame (00:00:10.0002)
  • * @param : $image_name (name of this image)
  • * @param : $size
  • */
  • public function get_image($frame,$image_name,$size){
  • $this->encoding_vformat = "mjpeg";
  • $this->encoding_duration = "001";
  • $this->encoding_time_position = $frame;
  • $this->encoding_vsize = $size;
  • //We build the image
  • $this->encode($image_name);
  • }
  • }
  • ?>
<?php
/*
 * @ name : video.php
 * @ description : a class used to encode, decode, resize and reformat videos...
 * @ author : Yaug - Manuel Esteban
 * @ contact : yaug@caramail.com
 * @ date : 03/01/2008
*/

class Video{

	public 	$video_file, $duration, $bitrate, $video_format, $audio_format,
			$video_size, $video_fps, $audio_freq, $audio_bitrate,
			$encoding_vformat, $encoding_aformat, $encoding_vcodec, $encoding_acodec,
			$encoding_vsize, $encoding_duration, $encoding_afreq, $encoding_target,
			$encoding_packet_size, $encoding_aspect, $encoding_ac, $encoding_bitrate,
			$encoding_abitrate, $encoding_fps, $encoding_time_position, $encoding_nosound;
	private $video_id;

	/*
	 * function : __construct
	 * @description : Constructor
	 * @param : $video
	*/
	public function __construct($video){
		$this->video_file 	= $video;
		$this->video_id		= md5($video);

		//On récupère les infos de la vidéo
		exec("ffmpeg  -i ".$this->video_file." &> ".$this->video_id.".info");
		$this->get_video_info();
	}

	/*
	 * function : __destruct
	 * @description : Destructor
	 * @param :
	*/
	public function __destruct(){
		if( is_file($this->video_id.".info") ) unlink($this->video_id.".info");
	}

	/*
	 * function : getextension
	 * @description : return the extension of any file
	 * @param : $file - name of the file (video.avi)
	*/
	public function getextension($file){
		return substr($file,strrpos($file,'.')+1);
	}


	/*
	 * function : get_video_info
	 * @description : Extract all the video information with ffmpeg
	*/
	private function get_video_info(){
		$handle = fopen($this->video_id.".info","r");
		if($handle){
		    while (!feof($handle)) {
		        $buffer = fgets($handle, 4096);
		        $Line=explode(" ",$buffer);
		        //print_r($Line);
		        //print("\n");
		        switch($Line[2]){
					case 'Duration:': 
						$this->duration = $Line[3];
						$this->bitrate 	= $Line[7];
					case 'Stream':
						if($Line[4]=="Video:"){
							$this->video_format = $Line[5];
							$this->video_size 	= $Line[7];
							$this->video_fps 	= $Line[8];
						}elseif($Line[4]=="Audio:"){
							$this->audio_format = $Line[5];
							$this->audio_freq 	= $Line[6];
							$this->audio_bitrate= $Line[9];
						}
				}
		    }
		    fclose($handle);
			return true;
		}
		return false;
	}


	/*
	 * function : set_encoding_vformat()
	 * @description : Set the format for video encoding
	 * @param : $format (the format of the output video)
	*/
	public function set_encoding_vformat($format){
		$this->encoding_vformat = $format;
	}


	/*
	 * function : set_encoding_aformat()
	 * @description : Set the format for audio encoding
	 * @param : $format (the format of the output audio)
	*/
	public function set_encoding_aformat($format){
		$this->encoding_aformat = $format;
	}


	/*
	 * function : set_encoding_vcodec()
	 * @description : Set the codec for video encoding, be carefull with the codec name
	 * @param : $codec (the codec of the output video)
	*/
	public function set_encoding_vcodec($codec){
		$this->encoding_vcodec = $codec;
	}


	/*
	 * function : set_encoding_acodec()
	 * @description : Set the codec for audio encoding, be carefull with the codec name
	 * @param : $codec (the codec of the output audio)
	*/
	public function set_encoding_acodec($codec){
		$this->encoding_acodec = $codec;
	}


	/*
	 * function : set_encoding_vsize()
	 * @description : Set the size of the output video
	 * @param : $width (width of the output video)
	 * @param : $height (height of the output video)
	*/
	public function set_encoding_vsize($size){
		$this->encoding_vsize = $size;
	}


	/*
	 * function : set_encoding_duration()
	 * @description : Set the size of the output video
	 * @param : $duration (duration of the output like 00:00:10)
	*/
	public function set_encoding_duration($duration){
		$this->encoding_duration = $duration;
	}


	/*
	 * function : set_encoding_afreq()
	 * @description : Set the audio frequence of the output video
	 * @param : $freq (audio frequence of the output like 00:00:10)
	*/
	public function set_encoding_afreq($freq){
		$this->encoding_afreq = $freq;
	}


	/*
	 * function : set_encoding_target()
	 * @description : Specify target file type
	 * @param : $target (Specified target file type)
	*/
	public function set_encoding_target($target){
		$this->encoding_target = $target;
	}


	/*
	 * function : set_encoding_packet_size()
	 * @description : Set packet size in bits.
	 * @param : $weight (Size)
	*/
	public function set_encoding_packet_size($weight){
		$this->encoding_packet_size = $weight;
	}


	/*
	 * function : set_encoding_aspect()
	 * @description : Set aspect ratio (4:3, 16:9 or 1.3333, 1.7777).
	 * @param : $ratio (Ratio of the generated video)
	*/
	public function set_encoding_aspect($ratio){
		$this->encoding_aspect = $ratio;
	}


	/*
	 * function : set_encoding_ac()
	 * @description : Set the number of audio channels
	 * @param : $nb (Number of channels)
	*/
	public function set_encoding_ac($nb){
		$this->encoding_ac = $nb;
	}


	/*
	 * function : set_encoding_bitrate()
	 * @description : Set the video bitrate in bit/s
	 * @param : $bitrate
	*/
	public function set_encoding_bitrate($bitrate){
		$this->encoding_bitrate = $bitrate;
	}


	/*
	 * function : set_encoding_abitrate()
	 * @description : Set the audio bitrate in bit/s
	 * @param : $abitrate
	*/
	public function set_encoding_abitrate($abitrate){
		$this->encoding_abitrate = $abitrate;
	}


	/*
	 * function : set_encoding_fps()
	 * @description : Set frame rate
	 * @param : $fps
	*/
	public function set_encoding_fps($fps){
		$this->encoding_fps = $fps;
	}


	/*
	 * function : set_encoding_time_position()
	 * @description : time position in seconds. hh:mm:ss[.xxx] syntax is also supported.
	 * @param : $position
	*/
	public function set_encoding_time_position($position){
		$this->encoding_time_position = $position;
	}


	/*
	 * function : set_encoding_nosound()
	 * @description : time position in seconds. hh:mm:ss[.xxx] syntax is also supported.
	 * @param : $position
	*/
	public function set_encoding_nosound(){
		if($this->encoding_nosound)$this->encoding_nosound=false;
		else $this->encoding_nosound=true;
	}


	/*
	 * function : encode()
	 * @description : Encode video with defined params
	 * @param : $file_name (name of the file created.)
	*/
	public function encode($file_name){
		$command = "ffmpeg -y -i ".$this->video_file;
		if($this->encoding_vformat) 	$command.=" -f ".$this->encoding_vformat;
		if($this->encoding_vcodec) 		$command.=" -vcodec ".$this->encoding_vcodec;
		if($this->encoding_acodec) 		$command.=" -acodec ".$this->encoding_acodec;
		if($this->encoding_vsize) 		$command.=" -s ".$this->encoding_vsize;
		if($this->encoding_duration)	$command.=" -t ".$this->encoding_duration;
		if($this->encoding_fps)			$command.=" -r ".$this->encoding_fps;
		if($this->encoding_bitrate)		$command.=" -b ".$this->encoding_bitrate;
		if($this->encoding_nosound)		$command.=" -an ";
		if($this->encoding_abitrate)	$command.=" -ab ".$this->encoding_abitrate;
		if($this->encoding_afreq)		$command.=" -ar ".$this->encoding_afreq;
		if($this->encoding_ac)			$command.=" -ac ".$this->encoding_ac;
		if($this->encoding_target)		$command.=" -target ".$this->encoding_target;
		if($this->encoding_packet_size)	$command.=" -ps ".$this->encoding_packet_size;
		if($this->encoding_aspect)		$command.=" -aspect ".$this->encoding_aspect;
		if($this->encoding_time_position)	$command.=" -ss ".$this->encoding_time_position;
		$command.=" $file_name";

		print("commande executée : $command");

		shell_exec($command);
	}


	/*
	 * function : get_image()
	 * @description : Get an image for a specific frame of a video
	 * @param : $frame (00:00:10.0002)
	 * @param : $image_name (name of this image)
	 * @param : $size
	*/
	public function get_image($frame,$image_name,$size){
		$this->encoding_vformat 		= "mjpeg";
		$this->encoding_duration 		= "001";
		$this->encoding_time_position 	= $frame;
		$this->encoding_vsize 			= $size;
		
		//We build the image
		$this->encode($image_name);
	}
}


?>

Conclusion


Cette source est toute neuve et est amenée à évoluer, n'hésitez pas à me signaler tout problème ou à me faire part de vos remarques et de vos suggestions.

Merci.
 

Commentaires et avis

signaler à un administrateur
Commentaire de webdeb le 03/01/2008 19:52:27 10/10

Très intéressant tout ça ;)

signaler à un administrateur
Commentaire de mazzala le 09/01/2008 12:16:54

Extrêmement interessant effectivement !
Alors je l'ai tester, et je n'ai pas de résultat chez moi. je suis sur windows Xp en local avec easyphp 1.8 et ffmpeg-php bien installé.

J'ai donc modifier la classe comme ceci :
$path_ffmpeg = "ffmpeg/ffmpeg/ffmpeg.exe";
$command = "$path_ffmpeg -y -i ".$this->video_file;

pour indiqué l'emplacement de ffmpeg.exe (j'ai eu raison ?).

et j'ai ensuite tenté de convertir un avi en flv comme ceci :
$Video = new Video(dirname(__FILE__).'/nowar.avi');
$Video->set_encoding_vformat("flv");
$Video->set_encoding_afreq("44100");
$Video->encode(dirname(__FILE__).'/test.flv');

J'ai ça comme résultat :
commande executée : ffmpeg/ffmpeg/ffmpeg.exe -y -i -f flv -ar 44100 f:\test\projet\test.flv

.... mas pas de fichier flv créé !
Est-ce que tu as une idée du pourquoi du comment ? Merci !!!

signaler à un administrateur
Commentaire de Yaug le 09/01/2008 13:55:21

Rah ces gens qui sont sur windows.
Déjà au passage, je te conseille de télécharger WampServer2 pour remplacer ton easyphp, c'est nettement plus abouti.

Ensuite.. concernant l'utilisation sous windows je n'ai pas encore eut la possibilité de tester. Il faueffectivement modifier le script pour indiquer ou se trouve ffmpeg...
T'as essayé en mettant une adresse absolue? C:\\www\ffmpeg......\ffmpeg.exe ?

signaler à un administrateur
Commentaire de mazzala le 09/01/2008 15:08:26

et oui windows ...sorry sorry ...
Oui, j'ai également essayer, j'ai mis mon ffmpeg dans systeme32 et j'ai tester en donnant l'adresse en absolue. ça fonctionne pas non plus ....
Sachant que le code suivant me génère bien mon flv (ce qui me donne la garanti que ma config fonctionne) :  

$path_ffmpeg = "C:\WINDOWS\system32\ffmpeg.exe";
$destination=dirname(__FILE__).'\nowar.avi';
$flv=dirname(__FILE__).'/theflv.flv';
$commande = "$path_ffmpeg -y -i $destination -t 00:00:40 -f flv -an -vcodec flv -s 350x250 -acodec mp3 $flv";
$res = system ($commande);

Je suis donc en train de faire des modifications sur la class en testant pour voir si j'arrive à un résultat. Si quelqu'un a des infos j'en veux bien, et dans tous les cas j'essayerais de synthétiser tout ça ici quand j'aurais trouver la bonne solution (j'y compte bien ! ;-) ).

signaler à un administrateur
Commentaire de Sniark le 10/01/2008 02:32:37

Bonjour à tous,

Ce code m'interesse beaucoup, mais je ne comprends le système de bibliothèque FFMPEG. Je suis chez 1and1, j'ai cherché sur le net, mais j'ai pas compris exactement en comment installer cette bibliothèque. Si j'ai bien compris, le code que tu donne est une class faisant appel à des fonctions présentes dans la bibliothèque ? Donc si c'est le cas, il faut que j'installe la bibliothèque sur mon espace web ? Que je demande à mon hébergeur ?

Merci à tous !!

signaler à un administrateur
Commentaire de Yaug le 10/01/2008 07:21:30

Tu as tout compris.

Bibliothèque / Logiciel qui existe sous linux ou windows.
Je te conseil de contacter 1&1 via un mail ou autre si tu veux pouvoir installer FFMpeg. Ils pourront t'aider normalement.

signaler à un administrateur
Commentaire de webdeb le 10/01/2008 09:14:50

@Sniark : FFMPEG est un programme / logiciel installé sur ta machine. Si tu es chez 1&1 en hébergement mutualisé, il y'a de fortes chances que tu ne puisses pas utiliser cette classe de manipulation de vidéo. Pourquoi ?

1/ Il faut installer FFMPEG sur le serveur
2/ Il faut avoir l'autorisation d'exécuter les commandes exec(), shell_exec()... (désactivées pour des raisons évidentes de sécurité sur du mutualisé).

Cette classe a été conçue pour être utilisée principalement sur un serveur dédié sur lequel on a la main complète.

++

signaler à un administrateur
Commentaire de Yaug le 10/01/2008 09:20:45

Merci WebDeb, j'aurais pas pu mieux expliquer.

Pour pouvoir installer ffmpeg et l'utiliser il te faut avoir totalement la main sur ton serveur.

signaler à un administrateur
Commentaire de Sniark le 10/01/2008 12:50:01

Merci à tous pour ces raisons précises ! Si j'ai bien compris pour utiliser ce système dont j'ai besoin, j'ai plus qu'à acheter un serveur c'est ça ? Existe-t-il des solutions alternatives pour convertir des vidéos uploadées en flv ? Ca va surement faire rire tout le monde, mais avant de comprendre que l'utilisation de ce sxript nécessitait une bibliothèque tiers, j'ai du possé des jours complets à essayer de le faire fonctionner :-) !

Merci encore !

signaler à un administrateur
Commentaire de Yaug le 10/01/2008 12:54:52

Tu as des serveurs dédiés pour pas trop cher.

Apres, je ne connais pas de logiciel qui puisse encoder en flv automatiquement. Il te faudrait à chaque fois télécharger les vidéos, les encoder à la main en flv, puis les renvoyer....
Lourd !

signaler à un administrateur
Commentaire de Sniark le 10/01/2008 12:58:39

Merci ! En effet, impossible de travailler de cette façon...

Merci encore à tous !

signaler à un administrateur
Commentaire de Sniark le 11/01/2008 01:58:51

Re bonjour tout le monde !

Du coup, je cherche la meilleure solution pour pouvoir utiliser ce genre de fonctions. Est ce que le mieux serait d'héberger mon site chez moi ? Et du coup où pourrais je trouver un hébergeur me fournissant un débit suffisant.
Ou est-il plus intéressant de se faire héberger chez un prestataire et du coup lequel ?

Merci

signaler à un administrateur
Commentaire de webdeb le 11/01/2008 09:13:58

Chez OVH tu peux te louer un serveur dédié pour moins de 30 euros par mois. Il s'agit du serveur Kimsufi (http://www.kimsufi.com ).

++

signaler à un administrateur
Commentaire de Sniark le 11/01/2008 11:08:30

Merci !

signaler à un administrateur
Commentaire de nemosyn le 05/02/2008 14:10:50

Bonjour,
je suis a bout ! J'aimerais avoir votre aide. J'ai installé ffmpeg ça fonctionne dans le terminal, je convertie mes vidéos.  Mon probleme est le suivant quand je lance ma page test.php :

$Video = new Video("e.avi");

$Video->set_encoding_vformat("flv");

$Video->set_encoding_afreq("44100");

$Video->encode("test.flv");


ça me renvoi un fichier .info et pas de flv..

signaler à un administrateur
Commentaire de nemosyn le 05/02/2008 14:17:49

Je tourne sur Ubuntu 7.10

signaler à un administrateur
Commentaire de Yaug le 05/02/2008 14:19:49

ton fichier .info est généré lors de la création de ton objet
Pour etre plus précis, ici :

# exec("ffmpeg -i ".$this->video_file." &> ".$this->video_id.".info");

Quelle ligne de code utilises tu dans le terminale au juste?
Est ce que le serveur te retourne une erreur ?
Je vais voir si j'arrive à t'aider

signaler à un administrateur
Commentaire de nemosyn le 05/02/2008 14:28:59

le serveur ne me renvoie aucune erreur ds la page. Mais je suis un débutant. comment on fais pr lire le fichier erreur de apache..

signaler à un administrateur
Commentaire de nemosyn le 05/02/2008 14:35:33

la commande "tail -2 /opt/lampp/logs/error_log" me renvoie  :
e.avi: I/O error occured
Usually that means that input file is truncated and/or corrupted.

signaler à un administrateur
Commentaire de Yaug le 05/02/2008 14:39:43

voila.
En gros... ton fichier n'est pas formaté correctement.
Essaye avec un autre fichier voir.

signaler à un administrateur
Commentaire de nemosyn le 05/02/2008 14:46:26

ok je vais regarder ça fai une semaine ke je suis dessus et je n'arrive vraiment pa a trouver de solution. je fais des test ac de nouveau fichier et je te tien au courant. Merci en tt cas

signaler à un administrateur
Commentaire de nemosyn le 05/02/2008 15:39:55

G essayé avec d'autres fichiers mais ça fonctionn vraiment pas, toujours la même erreur :
d.avi: I/O error occured
Usually that means that input file is truncated and/or corrupted.
Je me demande si le pb ne vient pas de l'user apache :s qui est "nobody" et qui est ds "nogroup".
j'ai mis ds mon fichier php.ini :
max_execution_time : 120
safe_mode :Off
upload_max_filesize : 50M
Aurais tu une idée d'ou le pb pourrait venir.. stp

signaler à un administrateur
Commentaire de Sniark le 05/02/2008 21:02:25

Bonjour,

J'essais d'installer FFMPEG depuis plus d'une semaine... J'ai cherché partout sur google, et rien de ce que j'ai trouvé n'a fonctionné. J'ai un server/passerelle avec SME SERVER qui tourne.
Je suis débutant et je comprends pas encore tout.
L'idée, si j'ai bien compris c'est de copier la library dans un dossier sur le server ? Mais lequel ? Et j'ai trouvé plusieurs versions de FFMPEG laquelle est ce que je dois utiliser ? J'ai trouvé plein de lignes de commande sur le net, mais rien n'a fonctionner... Quelqu'un peut m'aider ?

Merci à tous !

signaler à un administrateur
Commentaire de Yaug le 06/02/2008 12:02:10

Bonjour.

L'idée est en effet d'installer ffmpeg sur ton serveur.. de préférence un serveur linux.
Le soucis étant qu'il existe un tas de version de ffmpeg. Donc essaye d'installer la plus récente.

signaler à un administrateur
Commentaire de Sniark le 06/02/2008 16:03:12

Ok, mais comment l'installer ? Et surtout où ? Est-ce en lignes de commandes ?

Merci !

signaler à un administrateur
Commentaire de Yaug le 06/02/2008 16:47:48

Bah...
Ca dépend de si ton serveur est sous linux (et si oui quelle distrib) ou si il est sous windows hein. :)

signaler à un administrateur
Commentaire de Sniark le 06/02/2008 16:54:18

Je suis en linux SME SERVER 7.2

signaler à un administrateur
Commentaire de nemosyn le 06/02/2008 17:36:47

Bonjour,

un petit message pr dire ke j'ai résolu mon pb. En faite j'avais un pb de droit pr l'utilisateur Apache (nobody). J'ai du faire la commande suivante
chown -R nobody.nogroup /opt/lampp/htdocs

Merci :-)

signaler à un administrateur
Commentaire de softghost le 12/03/2008 19:23:31

Bonsoir tous le monde;

Je commence par dire que il marche jamais sur easyphp car il pense que ya des erreurs au niveau de code par exemple la :
public $video_file, $duration, $bitrate, $video_ / ligne 12

Par contre quand j'ai testé avec WAMP Server, ça marche mais pas .....

J'arrive a convertir vidéo wmv en flv mais le son juste le son hiihihihihihi

je vais tenté ma chanse encore ,

signaler à un administrateur
Commentaire de softghost le 12/03/2008 21:20:37

Bonsoir encore une fois c rapide,

je déclare que la classe marche parfaitement avec les format suivant wmv avi et mpg d'autre format en test par contre j'arive pas avoir la photo....

pour ceux qui ont des probleme utiliser pas easyphp pour cette classe, WAMPSERVER ou bien ZAZOU miniwebserver fait l'affaire,

a +++ et merci yaug

signaler à un administrateur
Commentaire de thegeniusdexter21 le 14/05/2008 16:06:36

Salut

Si kelk'un peut me repondre
Je demande dans kel repertoire allons nous installer la bibliothèque ffmpeg

MErci d'avance

signaler à un administrateur
Commentaire de zerty le 01/07/2008 19:50:56

Salut !

Comment faire pour avoir la durée de la vidéo ?
Merci ;)

signaler à un administrateur
Commentaire de ammar le 16/07/2008 09:42:12

est ce que ça fonctione chez 1and1 ?

signaler à un administrateur
Commentaire de Yaug le 16/07/2008 10:55:21

N'étant pas chez 1and1 je ne peux le dire.
Mais de toute manière cela n'a relativement rien à voir avec l'hébergeur.
le seul soucis est d'avoir un serveur linux et surtout d'avoir la main dessus afin de pouvoir installer ffmpeg.

signaler à un administrateur
Commentaire de Sniark le 23/09/2008 14:48:08 10/10

Bonjour à tous !
Je trouve cette source remarquable, mais je ne parviens pas à trouver la syntaxe correcte pour utiliser la fonction get_video_info...
Est ce que quelqu'un peut m'aider ? Je cherche à afficher à l'écran les specs de la vidéo genre codec, bitrate etc.... Comment rédiger la syntaxe ?
$Video = new Video("Test.3gp");
$video->get_video_info() ????

Merci à tous !

signaler à un administrateur
Commentaire de Yaug le 23/09/2008 14:53:33

Bonjour à toi.
Dans la classe présentée si dessus, la fonction get_vidéo_info est de préfixée par le mot clé "private".
Cela signifie qu'elle ne peut être utilisée que au sein de la classe.
Pour pouvoir faire ce que tu veux, remplace "private" par "public" et cela devrait fonctionner.

signaler à un administrateur
Commentaire de Sniark le 23/09/2008 15:04:00

OK
avec ce code :
$Video = new Video("yann.3gp");
$Video->get_video_info();

j'obtiens cette erreur :
Warning: fopen(ffa4c5eadaf55e15f953006a5555128e.info) [function.fopen]: failed to open stream: No such file or directory in W:\var\www\ffmpeg.php on line 45


Qu'est ce que je fais mal ???

Merci à tous !

signaler à un administrateur
Commentaire de Yaug le 23/09/2008 15:15:22

c'est à cet endroit :
# $handle = fopen($this->video_id.".info","r");

le fichier n'a pas été créé , comme l'indique l'erreur php.
Donc a toi de voir pourquoi ce n'est pas créé !

signaler à un administrateur
Commentaire de Sniark le 23/09/2008 15:22:47

ok. Mais au niveau de la syntaxe que j'ai tapé là :
$Video = new Video("yann.3gp");
$Video->get_video_info();

c'est bon ? C'est sensé fonctionner ? Sachant que j'ai changé private en public
Merci de ton aide !!!!!

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

ffmpeg-php [ par buno ] Bonjour,Je suis actuellement en train de d&#233;velopper un site de gestion de fichiers vid&#233;o. Sur ce site, j'ai besoin d'extraire des informatio taille max d'un tableau [ par Urukai1 ] petite question toute bete &nbsp;- jusqu'&#224; combien d'elements de type 'ma cle' =&gt; 'ma valeur' peut-on mettre dans un tableau en php sans que c GEstion dynamique vidéo [ par zzzzzz ] Bonjour, Alors voila j'aimerai pouvoir laisser libre access &#224; mes membres pour qu'ils puissent ajouter leurs propre vid&#233;os, seulement voi heritage en php [ par fredericmaill ] Bonjour, lors de la cration d'un heritage en php&nbsp; 4, &nbsp;classe mere et classe fille, les 2 classes doivent etres l'un en dessous de l'autre ou Vidéo URL Caché [ par Viper_ ] Bonjour,j'aimerais savoir si il y a un moyen de "cach&#233;" le URL d'un vid&#233;o (par exemple) de mani&#232;re &#224; ce qu'une page php serve de t fonction Autoload.... [ par Yemanjah ] Bonjour , &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Apr&#232;s de multiples essais , je d&#233;sesp&#232;re et viens demander de l'aide ici.J'essaye de met mails avec pièces jointes [ par refkaben ] Bonjour!j'ai trouv&#233; dans les codes de phpcs une classe qui permet l'envoi des emails avec des pi&#232;ces jointes.J'ai adapt&#233; la classe &#22 Problème d'encodage !! [ par Zebra1928 ] bonne ann&#233;e &#224; tous !!nous avon un probl&#232;me pour &#233;crire en arabe et latin dans des pages PHP, dans le fichier PHP.INI nous avons ut objet sqlite [ par jackrichard ] bonjour a tousd&#233;sol&#233; si la question est con mais bon la je pige pas sur un livre de php on me dit que php5 propose la classe&nbsp;sqlite_db Lecture de Vidéo [ par bbmaster ] Bonjour,&nbsp; Je suis actuellement en train de construire mon site de mon &#233;quipe de jeux vid&#233;o et je voudrais y ins&#233;r&#233; un script


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode