begin process at 2010 02 10 00:01:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE FFMPEG DE GESTION DE VIDÉOS

CLASSE FFMPEG DE GESTION DE VIDÉOS


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : Yaug

Ecrire un message privé
Site perso
Commentaire sur cette source (56)
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("f lv");
$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("300 x200"); // 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","vignett e.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.


 Sources du même auteur

CLASSE DE REDIMENSION D'IMAGE.
Source avec Zip ENCODAGE ET TRAITEMENT DE AUTOMATIQUE DE VIDÉOS EN UPLOAD

 Sources de la même categorie

Source avec Zip POO - LOGGING PACKAGE par Waredan
POO - OBJECT CLASS par Waredan
Source avec Zip POO - FACTORY CLASS par Waredan
POO - SINGLETON CLASS par Waredan
POO - PARAMETERHOLDER CLASS par Waredan

 Sources en rapport avec celle ci

Source avec Zip CLASSE SIMPLE DE GESTION DE FICHIERS par alexarbitre
Source avec Zip EXÉCUTER DES REQUETE STYLE SQL SUR UN ARRAY par prince418
Source avec Zip CLASSE DE COMMANDES PEAR DB par pascalmintrosse
CLASSE PAGINATION par darkis
Source avec Zip [POO][PHP5]UN SITE MULTILANGUE VIA XML par destinyfr

Commentaires et avis

Commentaire de webdeb le 03/01/2008 19:52:27 10/10

Très intéressant tout ça ;)

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 !!!

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 ?

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 ! ;-) ).

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 !!

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.

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.

++

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.

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 !

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 !

Commentaire de Sniark le 10/01/2008 12:58:39

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

Merci encore à tous !

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

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 ).

++

Commentaire de Sniark le 11/01/2008 11:08:30

Merci !

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..

Commentaire de nemosyn le 05/02/2008 14:17:49

Je tourne sur Ubuntu 7.10

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

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..

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.

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.

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

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

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 !

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.

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 !

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. :)

Commentaire de Sniark le 06/02/2008 16:54:18

Je suis en linux SME SERVER 7.2

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 :-)

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 ,

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

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

Commentaire de zerty le 01/07/2008 19:50:56

Salut !

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

Commentaire de ammar le 16/07/2008 09:42:12

est ce que ça fonctione chez 1and1 ?

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.

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 !

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.

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 !

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éé !

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 !!!!!

Commentaire de thony43 le 22/10/2008 16:09:10

bonjour,

je voulais tester la chose qui a l'air très intéressante, amis j'ai cette erreur :

Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in d:\program files\easyphp1-8\www\encodage2\video.php on line 13

La ligne 13 correpondant à :
public $video_file, $duration, $bitrate, $video_format, $audio_format,


Quelqu'un peut m'aider ?

Merci :)

Commentaire de Yaug le 22/10/2008 16:13:05

heu....
Pour sortir une erreur ici faut le faire :)
Déjà je te conseil d'utiliser wamp plutot que easyphp.

Quand au bug... tu n'as pas altéré par erreur la structure du fichier?
Car franchement, je ne vois pas d'où cela peut venir.

Commentaire de thony43 le 22/10/2008 16:28:27

De retour,

bon, ça marche avec wamp... Je vais pas chercher plus loin. Plus qu'à coulper ça avec un formulaire d'upload :)

Merci

Commentaire de Yaug le 22/10/2008 16:30:48

en fait je pense que ton easy php est en php4.
Et que du coup il cherche le mot clé var et ne le trouvant pas il léve une erreur.
C'est la seule solution que je vois :)

Bonne chance pour la suite.

Commentaire de meryyy le 02/12/2008 16:24:38

bonjour tout le monde ,
mon probléme est que je travaille sous windows et je veux enregister un flux video provenant de ma camera de surveillance IP . j'ai reussi à afficher les video en direct.
j'ai déja installé le ffmpeg avec easyphp v 1.8 .
est ce que vous pouvez me proposer un script pour ça?
merci de m'aider ,c'est urgent .

Commentaire de Yaug le 02/12/2008 16:28:31

Bonjour.
Ce que tu cherches à faire c'est du streaming et je ne sais en faire pour le moment avec FFMPEG.
Désolé.

Commentaire de meryyy le 03/12/2008 11:01:30

bonjour Yaug,
merci pour ta réponse mais je ne cherche pas du streaming j'ai dis que j'ai réussi à depasser l'étape du streaming des video mais ce que je cherche c'est de programmer un bouton dans ma page web qui me permet d'enregister une séquence de video . on m'a dit que j'ai besoin de ffmpeg pour réaliser ça .

Commentaire de Yaug le 03/12/2008 11:27:52

Enregistrer une séquence de vidéo depuis un flux vidéo?
C'est bien cela?

Dans ce cas j'appelle ça du streaming (a tord ou a raison) et je ne sais pas faire.
Désolé.

Sinon, je n'ai pas bien pigé (ça arrive).

Commentaire de jbashh le 25/12/2008 15:50:23 10/10

Bonjour,

d'abord merci pour cette source.

j'ai quelques questions annexes.
d'abord selon vous quel est le meilleur setting pour encoder proprement ? sans pixelisation.

et sinon tant qu'on y est, vous avez un lecteur a conseiller pour l'affichage final ? ainsi q'un "uploader" a inclure dans un formulaire d'envoi?(j'utilise jwplayer en lecteur et un uploader en flash/php mais reste deux trois légers bugs ou inconvénients sous linux notamment)

merci
... et joyeux noël :)

Commentaire de whoetbe le 30/03/2009 22:38:14

intéressant, à suivre pour l'info sur les meilleurs paramètres d'encodage.

Commentaire de Archima le 01/05/2009 21:13:53

Peut-on avoir la source pour windows ? J'ai essayer mais je bloque au niveau du fichier .info, Je ne comprends pas son utilité, et je ne vois pas comment 'convertir' ce passage pour windows ?

Commentaire de Yaug le 04/05/2009 10:04:22

Bonjour.
Le fichier .info est en fait rempli par la commande exec :

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

Il contient le résultat de la commante ffmpeg -i nomdetavideo qui te permet de récupérer les informations concernant ta vidéos.
Tu as donc soit un soucis quand à l'exécution de ta commande, soit un problème sur les droits de créations du fichier.
Vu qu'on parle de windows, je pencherais sur la première.

La récupération des infos concernant la vidéo reste essentielle pour pouvoir ensuite la retravailler

Commentaire de Archima le 04/05/2009 17:12:31

Après avoir regardé dans la doc windows de ffmpeg, je trouve pas cette commande :
ffmpeg.exe -i videoSource &> nomVideoSource.info

Elle ne doit pas exister pour windows, et je connais pas Linux non plus. J'ai pensé que : "&>" revient à enregistrer le résultat qui y a dans la console dans un fichier. Mais j'en suis pas sur. Quelqu'un peut m'éclairer sur la question ?

Commentaire de Yaug le 04/05/2009 18:17:47

C'est tout à fait cela.
> permet de rediriger le flux de sorti (ici du texte) vers un fichier.
Je récupère ainsi le résultat de la commande pour pouvoir plus tard traiter ma vidéo en conséquence.

Commentaire de sayruscs le 08/05/2009 16:43:24

Hello,

Pour pouvoir utiliser la fonction get_video_info() même sous windows, il vous suffit de faire ceci:

shell_exec("c:/WINDOWS/system32/ffmpeg.exe -i ".$this->video_file." 2> ".$this->video_id.".info");

en fait, il faut simplement remplacer "&>" par "2>"

Je n'ai pas développé plus ma modification, mais soyez certains que les infos s'enregistre bien dans le fichier .info

Commentaire de gmohamed le 24/10/2009 12:30:41

salut tous
j'ai une question sur l'extension de php ffmpeg-php
savez vous comment l'installer sur un serveur wamp2.0 ?
j'ai essayé de l'installer avec cette méthode mais ça ne fonctionne pas !
1- platform : Windows XP SP2 + WAMPSERVER 2.0 + PHP 5.2.6
2- Téléchargement des archives ffmpeg et ffmpeg-php (compressés)
3- Extraire ffmpeg et le mettre dans : c/ffmpeg/ffmpeg.exe
4- Extraire ffmpeg-php, copier tous les fichiers inclus et les copier dans le repertoire des extension de PHP
5- Ouvrir php.ini et ajouter:
[PHP_ffmpeg]
extension=php_ffmpeg.dll
6- Sauvegarder et fermer php.ini
7- Redémarrer Apache
Terminé

alors l'extension apparait dans les extension de PHP, mais quand j'exécute ce script:
<?php

$mov = new ffmpeg_movie('test.avi');

?>
je reçois ce résultat !
Fatal error: Class 'ffmpeg_movie' not found in C:\wamp\www\Nouveau dossier\ffmpeg.php on line 3

ce qui veut dire que la class n'est pas prise en charge !!

Où est le problème?!
Merci pour votre aide


Commentaire de gmohamed le 24/10/2009 12:54:56

voici les liens de téléchargement:
ffmpeg : http://uploading.com/files/ebffmma8/ffmpeg-latest.tar.bz2/

ffmpeg-php : http://uploading.com/files/9eb7a93c/ffmpeg-php-win32-all.zip/

 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...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,733 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales