begin process at 2012 02 05 00:05:38
  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 :
9,75 / 10 - par 4 personnes
9,75 / 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 :18 305

Auteur : Yaug

Ecrire un message privé
Site perso
Commentaire sur cette source (71)
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

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

 Sources en rapport avec celle ci

Source avec Zip TESTS UNITAIRES par pierreSabatier
Source avec une capture CLASSE CONSTRUCTEUR DE TABLEAU HTML EN PHP (REVU ET CORRIGÉ) par demonstorm
Source avec Zip Source avec une capture CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGE par Salva9473
CLASSE MYSQL UTILISANT LES FONCTIONS PDO par Vince66
Source avec Zip Source avec une capture GÉNÉRATION DE FORMULAIRES HTML PERSONNALISÉS. par beejeridou

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/

Commentaire de titanshift le 11/04/2010 18:31:59

merci champion !

Commentaire de gmohamed le 15/04/2010 19:23:52

Salut;
Je cherche une solution !

Commentaire de henristras le 26/05/2010 20:45:40

Salut,

Je suis bloqué sur une étape, et après avoir parcouru plusieurs forum je ne vois pas comment me sortir de cette impasse.
Mon OS : Ubuntu 10.4
Serveur Web : Apache2 et PHP5
Avec ffmpeg, qui en ligne de commande fonctionne correctement.

Pour pb et le suivant:
- Dans la phase exec(...) la récupération du fichier(video) est correcte et la création du fichier info l'est aussi. Par contre les droits sur le fichier résultant ne permettent pas l'écriture dans le fichier, et là!!! je pêche.
Je ne vois pas comment faire pour que le fichier créé puisse être accessible en écriture, afin décrire le contenu.

Quand j'exécute la commande manuellement j'ai le retour suivant :
"Permission non accordée"

Je pense qu'il s'agit de mettre ffmpeg dans le bon groupe de user, mais je ne vois pas comment faire.

Si vous avez une solution je suis très preneur.

Merci

Commentaire de henristras le 26/05/2010 22:17:17

Après moulte essai, j'ai réussi à voir que le pb n'est pas au niveau des droits mais dans le exec().
Si j'exécute la requête à la main (celle de l'exec() ) tout ce passe bien, mais l'exec() ne retourne rien quand il s'exécute seul. J'ai faire un test :

print(exec("ffmpeg -i ".$this->video_file)); j'ai queude :-( o_o

Est ce un pb avec le ffmpeg-php?

Commentaire de Yaug le 27/05/2010 08:39:36

Bonjour.
Sur certains hébergements les fonctions du styles exec sont bridées ou désactivées.
Peut être devrais tu voir de ce coté non ?
Ou voir si PHP a les droits suffisant. Si PHP n'a pas assez de droit, il n'aura pas la possibilité de créer / manipuler des fichiers.

En espérant que cela te serve.

Commentaire de henristras le 27/05/2010 09:36:43

Merci Yaug pour ta réponse,

Je suis sur mon propre serveur, je peux donc faire toute les manips souhaitées.

Comment puis je faire pour constater si exec est bridé ou non. Je vais fouiller sur google mais si quelqu'un à la réponse....voila voila.

Bonne journée :-)

Commentaire de henristras le 27/05/2010 11:29:04

Bonjour,

Je viens de refaire un test en manu. Et maintenant j'ai "Permission non accordée" alors que j'ai fait un chmod 777 sur le fichier cible.
Comme puis je modifier les droits pour pouvoir exécuter ffmpeg en tant que user et que le exec() ou le shell_exec() puisse aussi.

Merci

Commentaire de ju0123456789 le 07/06/2010 12:27:07

Bonjour,

Selon vous, comment installer ceci sur un serveur 1&1 svp ?

Commentaire de _klesk le 01/09/2010 19:42:23

Juste pour te remercier pour ton boulot, magnifique et propre. Je suis tombé par hasard sur t'a class en me battant avec ffmpeg-php.

C'est au poil pour mon projet :)
encore merci

Commentaire de _klesk le 01/09/2010 19:45:39 9/10

Désolé pour le double post j'ai oublier de voter, je met 9/10 car rien n'est parfait, mais cette class est super à mon gout :) et j'aurais mis 9.9/10 si c'était possible !

Commentaire de ju0123456789 le 02/09/2010 08:46:30

Il y a t-il moyen d'injecter des metadatas dans la videos ?

Commentaire de _klesk le 02/09/2010 21:45:50

J'ai trouver ça pour les metadata dans la doc ffmpeg, je n'ai pas tester par contre :

-metadata key=value'
    Set a metadata key/value pair. For example, for setting the title in the output file:

    ffmpeg -i in.avi -metadata title="my title" out.flv


Des informations sur  sur les paramètres pour éviter la pixelisation ??

Commentaire de ju0123456789 le 03/09/2010 09:10:49

J'ai essayé mais ej suis confronté à un probleme tout autre : upload trop logn sur mon hebergeur donc plantage ! ya t il pas moyen d'accelerer les uploads ?

Commentaire de Yaug le 03/09/2010 09:12:35

Accélérer les uploads?
Non impossible.
C'est un problème de machine et de réseau à ce niveau là.

Commentaire de n1k00 le 21/06/2011 15:55:23

Bonjour j'aimerais savoir si tu avais apporté des améliorations à ta classe parce que compte l'utiliser pour un prochain projet.

De plus en la lisant rapidement tu as fait une petite erreur dans ton commentaire ligne 152 pour la fréquence tu donne l'exemple de la durée juste au dessus.

 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

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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 : 1,248 sec (3)

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