Home       Prodotti e Servizi       Area Clienti       Help-Info & Utility       Blog

HostServiceNet: Usare FFMPEG in PHP - HostServiceNet

Jump to content

Toggle shoutbox Shoutbox

Guest : (21 marzo 2011 - 05:56 ) Test di servizio...
Resize Shouts Area

Pagina 1 di 1
  • You cannot start a new topic
  • You cannot reply to this topic

Usare FFMPEG in PHP Usare FFMPEG in PHP, Convertire File Video, Cattura immagine,altro Rate Topic: ***** 1 Votes

#1 User is offline   davide86 

  • Member
  • PipPipPip
  • Gruppo: Members
  • Messaggi: 44
  • Iscritto il: 11-dicembre 07

Posted 14 novembre 2011 - 02:22

Premetto che non sono un esperto di FFMPEG, ma sto lavorando per fare un sito di Video e quindi mi sono imbattuto in questa libreria.
Spero che vi possa essere d'aiuto e utile per i vostri progetti. Se riscontrate malfunzionamenti contattatemi e cerchiamo insieme di trovare le soluzioni al problema.
Vi saluto e buon lavoro.

Per prima cosa inserire la seguente riga all'inizio della pagina .php:

<?php
define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg'); 
?>


Per aiutarvi a comprendere come è semplice convertire un file vi scrivo un esempio di codice.
Esempio Funzione Conversione File AVI - MP4 - M4V - OGG - FLV "coverti_video.php" :

<?php
define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg'); 

$input = "upload/video/test.avi"; //percorso dove leggere il file .avi
$estenzione = ".mp4"; //estenzione file qui cambiate come volete .mp4, ogg, flv, mpeg, m4v ec..
$nome_file = "Test"; //Nome del File da salvare
$output = "upload/video/"; //percorso cartella destinazione

$salva = $output . $nome_file . $estenzione;

$risultato_conversione = Converti_video($input,$salva);
if($risultato_conversione == "TRUE"){ echo "Convertito con sucesso";}else{ echo "Errore conversione";}

function Converti_video($percorso_file,$destinazione){
	$boolean = "FALSE";
   $exec_string = FFMPEG_LIBRARY.' -i ' . $percorso_file . ' -an ' . $destinazione; 
   exec($exec_string); //commando di shell php 
  return $boolean = "TRUE";
}
?>


Si può utilizzare un'altro metodo per la conversione :

<?php

$input = "upload/video/test.avi"; //percorso dove leggere il file .avi
$estenzione = ".m4v"; //estenzione file qui cambiate come volete .mp4, ogg, flv, mpeg, m4v ec..
$nome_file = "Test"; //Nome del File da salvare
$output = "upload/video/"; //percorso cartella destinazione

$salva = $output . $nome_file . $estenzione;

$risultato_conversione = Converti_File_AVI_to_M4V($input,$salva);
if($risultato_conversione == "TRUE"){ echo "Convertito con sucesso";}else{ echo "Errore conversione";}

function Converti_File_AVI_to_M4V($file_name,$destinazione){
$boolean = "FALSE";

$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

// load extension
if(!extension_loaded($extension))
{ 
   dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

// Set our source file 
$srcFile = $file_name; 
$destFile = $destinazione; 

$ffmpegPath = "/usr/bin/ffmpeg"; 

 // Call our convert using exec() 
exec($ffmpegPath ." -i " .  $srcFile . " ". $destFile);
//echo $ffmpegPath ." -i " .  $srcFile . " -ar "  . $destFile;
$boolean = "TRUE";
return $boolean;
}
?>


Scrivere e salvare in un array Durata Video e Grandezza Video :

<?php
$video_file = "upload/video/test.avi";

$Array_Video = Durata_Video($video_file); // così facendo scrive i valori e poi li salva nella variabile Array_Video
$durata = $Array_Video['durata'];
$altezza = $Array_Video['h'];
$larghezza = $Array_Video['w']; 

function Durata_Video($video_file){

$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

// load extension
if(!extension_loaded($extension))
{ 
   dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

//$file = "robot.avi";
$file = $video_file;

$frame = 150;
$max_width = 400; 

$movie = new ffmpeg_movie($file);

echo "Durata Video: ";
echo "<b>".gmdate("H:i:s",$movie->getDuration())."</b><br />"; 
echo "Grandezza: ";
echo "<b>".$movie->getFrameWidth()." x ".$movie->getFrameHeight()."</b>"; 

$valore['durata'] = gmdate("H:i:s",$movie->getDuration());
$valore['w'] = $movie->getFrameWidth();
$valore['h'] = $movie->getFrameHeight();

return $valore;
}
?>

Cattura immagine dal video e salvala :
<?php
$video_file = "upload/video/test.avi";
$destinazione_jpg = "upload/video/test.jpg";

$risultato_cattura_img = Crea_Immagine_Anteprima_Video($video_file, $destinazione_jpg);
if($risultato_cattura_img == "TRUE"){ echo "creato file .jpg";}else{ echo "errore file non salvato";}

function Crea_Immagine_Anteprima_Video($video_file, $destinazione_jpg){
	$boolean = "FALSE";
	
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

// load extension
if(!extension_loaded($extension))
{ 
   dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

//$file = "ffmpeg1/tests/test_media/robot.avi";
$file = $video_file;

$frame = 2;
$max_width = 400; 

$movie = new ffmpeg_movie($file);

$image = $movie->getFrame($frame);
$show_img = $image->toGDImage(); 

$new_image = new ffmpeg_frame($show_img);

$old_width = $new_image->getWidth();
$old_heighgt = $new_image->getHeight();

$mov_ratio = $old_width/$old_heighgt;
if($old_width > $max_width){
$new_width = $max_width;
}

//$new_height = $new_width / $mov_ratio;
//$new_image->resize($new_width, $new_height);
$new_image->resize(300, 300);
$new_show_img = $new_image->toGDImage(); 

//header("Content-type: image/jpeg");
 imagejpeg($new_show_img,$destinazione_jpg);
 imagedestroy($new_show_img); 
  $boolean = "TRUE";

return $boolean;
}
?>

This post has been edited by davide86: 01 dicembre 2011 - 04:28

1

#2 User is offline   davide86 

  • Member
  • PipPipPip
  • Gruppo: Members
  • Messaggi: 44
  • Iscritto il: 11-dicembre 07

Posted 24 novembre 2011 - 08:41

Come fare l'upload dei file video ed estrapolare un'immagine dal video postato.

Per prima cosa serve una pagina che contenga un form e il bottone per scaricare il file : Creiamo una pagina e la nominiamo "form_upload.htm"

<html>
<title></title>
<body>

<form method="post" action="upload.php" enctype="multipart/form-data">
    <input type="file" name="link_video">
    <input type="submit" value="Upload">
</form>

</body>
</html>


Ora creiamo una pagina PHP e la nominiamo "upload.php", creiamo nella stessa cartella dove si trova il file php , una nuova cartella con il nome "upload_video" e un'altra cartella con il nome "anteprima_img_video" che conterrà le immagini create.

<?PHP
// Upload dei file video e cattura l'immagine di anteprima By Davide86
define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg'); 

$dimensione_massima=51200000; //dimensione massima consentita per file in byte -> 1024 byte = 1 Kb
$dimensione_massima_Kb=$dimensione_massima/1024;
$cartella_upload_video="upload_video/"; //cartella in cui eseguire l'upload (controllare permessi scrittura)
$filtrare=1; //filtrare x estensioni ammesse? 1=si 0=no
$array_estensioni_ammesse=array('.avi','.flv','.mpg','.mp4'); //estensioni ammesse, file ammessi
$destinazione_jpg = "anteprima_img_video/";

if(!isset($_FILES['link_video']) || $_FILES['link_video']['size']==0){
		$testo_errore = "Nessun file selezionato per l'upload";
		$boolean_error_upload = TRUE;
}elseif($_FILES['link_video']['size']>$dimensione_massima){
		$testo_errore =  "Il file selezionato per l'upload supera dimensione massima di $dimensione_massima_Kb Kb";
		$boolean_error_upload = TRUE;
	}else{	
		$nome_file=$_FILES['link_video']['name'];	
		$errore="";	
			if($filtrare==1){	
				$estensione = strtolower(substr($nome_file, strrpos($nome_file, "."), strlen($nome_file)-strrpos($nome_file, ".")));		
					if(!in_array($estensione,$array_estensioni_ammesse)){
						$errore.="Upload file non ammesso. Estensioni ammesse: ".implode(", ",$array_estensioni_ammesse)."<br/>";
						$boolean_error_upload = TRUE;
					}
			}
	if(!file_exists($cartella_upload_video)){		
		$errore.="La cartella di destinazione non esiste</br>";
		$boolean_error_upload = TRUE;
	}
	if($errore==""){
				if(move_uploaded_file($_FILES['link_video']['tmp_name'], $cartella_upload_video.$_FILES['link_video']['name'])){
						chmod($cartella_upload_video.$_FILES['link_video']['name'],0777); 
						//permessi per poterci sovrascrivere/scaricare			
						$testo_positivo = "Operazione eseguita con successo. Upload riuscito.";	
						$percorso_file = $cartella_upload_video.$_FILES['link_video']['name'];
						$boolean_img = Crea_Immagine_Anteprima_Video($percorso_file, $destinazione_jpg.$_FILES['link_video']['name'].".jpg");
						$boolean_error_upload = FALSE;
				}else{			
						$testo_errore =  "Impossibile effettuare l'upload del file";	
						$boolean_error_upload = TRUE;
				}	
	}else{	
		echo $errore;	
		$boolean_error_upload = TRUE;
		exit;
	}
}

if(($boolean_error_upload == FALSE )and ($boolean_img == "TRUE")){ 
    echo $testo_positivo; 
    echo "<br><a href='javascript:history.go(-1)'>Torna indietro</a>";
}else{
   echo $testo_errore; 
   echo "<br><a href='javascript:history.go(-1)'>Torna indietro</a>";
}



function Crea_Immagine_Anteprima_Video($video_file, $destinazione_jpg){
$boolean = "FALSE";
	
$extension = "ffmpeg";
$extension_soname = $extension . "." . PHP_SHLIB_SUFFIX;
$extension_fullname = PHP_EXTENSION_DIR . "/" . $extension_soname;

// load extension
if(!extension_loaded($extension))
{ 
   dl($extension_soname) or die("Can't load extension $extension_fullname\n");
}

$file = $video_file;

$frame = 2;
$max_width = 400; 

$movie = new ffmpeg_movie($file);

$image = $movie->getFrame($frame);
$show_img = $image->toGDImage(); 

$new_image = new ffmpeg_frame($show_img);

$old_width = $new_image->getWidth();
$old_heighgt = $new_image->getHeight();

$mov_ratio = $old_width/$old_heighgt;
if($old_width > $max_width){
$new_width = $max_width;
}

$new_image->resize(300, 300);
$new_show_img = $new_image->toGDImage(); 

 imagejpeg($new_show_img,$destinazione_jpg);
 imagedestroy($new_show_img); 
  $boolean = "TRUE";
  
return $boolean;
}

?>


Ricordativi di creare un file "php.ini" che contenga queste righe di codice e upload nella stessa cartella dove si trova il file "upload.php" :

[PHP]
safe_mode = Off


Fatemi sapere se vi funziona. Il codice è stato testato sui server di HOSTSERVICENET.COM e funziona al 100% .

Grazie alla prossima. Se avete richieste fatele e se posso vi aiuto a realizzarle.
1

#3 User is offline   davide86 

  • Member
  • PipPipPip
  • Gruppo: Members
  • Messaggi: 44
  • Iscritto il: 11-dicembre 07

Posted 01 dicembre 2011 - 05:19

Oggi vi parlo di come Estrapolare un file Audio (MP3) da un Video (AVI/FLV) .

Per prima cosa creiamo un file "php.ini" e inseriamo questa voce :

[PHP]
safe_mode = Off


Poi passiamo a creare una cartella con il nome "mp3" dove conterrà tutti i file ".mp3" che andiamo ad estrapolare.

Poi passiamo a creare un file "PHP" con il nome "estrapola_mp3_da_video.php" e copiamo il seguente codice :

<?php 
/*
Script Estrapolare MP3 da un file Video con PHP e FFMPEG By Davide86
Estrazione :

•Sorgente video : test.avi
•Audio bitrate : 192kb/s
•output Formato : mp3
•Generare risultato suono : Test.mp3

*/

define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg');  
 
$input = "test.avi"; //percorso dove leggere il file .avi o flv
$estenzione = ".mp3"; //estenzione file musicale
$nome_file = "Test"; //Nome del File da salvare 
$output = "mp3/"; //percorso cartella destinazione 
 
$salva = $output . $nome_file . $estenzione; 
 
$risultato_conversione = Estrapola_MP3($input,$salva); 
if($risultato_conversione == "TRUE"){ echo "Creato file MP3 con sucesso"; echo " <a href='$salva' >Apri File Creato</a>";}else{ echo "Errore Estrapolazione";} 
 
function Estrapola_MP3($percorso_file,$destinazione){ 
        $boolean = "FALSE"; 
   $exec_string = FFMPEG_LIBRARY.' -i ' . $percorso_file . ' -vn -ar 44100 -ac 2 -ab 192 -f mp3 ' . $destinazione;  
   exec($exec_string); //commando di shell php  
   //ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3
  return $boolean = "TRUE"; 
} 
?>


E' stato testato sul Server di HostServiceNet e funziona al 100% se ci sono problemi contattatemi.
1

#4 User is offline   davide86 

  • Member
  • PipPipPip
  • Gruppo: Members
  • Messaggi: 44
  • Iscritto il: 11-dicembre 07

Posted 08 marzo 2012 - 11:02

Stampare a video o salvare in un Array, tutte le informazioni utili dei file mp3 o video, tramite la libreria FFMPEG (es: Autore, Durata, Larghezza, Lunghezza, Titolo, ecc..)

<?php
define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg'); 

extension_loaded('ffmpeg') or die('Error in loading ffmpeg');

//Ricordatevi di modificare e di inserire il file del vostro video o mp3 apposto di 'clock.avi'
$ffmpegInstance = new ffmpeg_movie('clock.avi');

echo "<br>"; echo " getDuration: " . $ffmpegInstance->getDuration();
echo "<br>"; echo " getFrameCount: " . $ffmpegInstance->getFrameCount();
echo "<br>"; echo " getFrameRate: " . $ffmpegInstance->getFrameRate();
echo "<br>"; echo " getFilename: " . $ffmpegInstance->getFilename();
echo "<br>"; echo " getComment: " . $ffmpegInstance->getComment();
echo "<br>"; echo " getTitle: " . $ffmpegInstance->getTitle();
echo "<br>"; echo " getAuthor: " . $ffmpegInstance->getAuthor();
echo "<br>"; echo " getCopyright: " . $ffmpegInstance->getCopyright();
echo "<br>"; echo " getArtist: " . $ffmpegInstance->getArtist();
echo "<br>"; echo " getGenre: " . $ffmpegInstance->getGenre();
echo "<br>"; echo " getTrackNumber: " . $ffmpegInstance->getTrackNumber();
echo "<br>"; echo " getYear: " . $ffmpegInstance->getYear();
echo "<br>"; echo " getFrameHeight: " . $ffmpegInstance->getFrameHeight();
echo "<br>"; echo " getFrameWidth: " . $ffmpegInstance->getFrameWidth();
echo "<br>"; echo " getPixelFormat: " . $ffmpegInstance->getPixelFormat();
echo "<br>"; echo " getBitRate: " . $ffmpegInstance->getBitRate();
echo "<br>"; echo " getVideoBitRate: " . $ffmpegInstance->getVideoBitRate();
echo "<br>"; echo " getAudioBitRate: " . $ffmpegInstance->getAudioBitRate();
echo "<br>"; echo " getAudioSampleRate: " . $ffmpegInstance->getAudioSampleRate();
echo "<br>"; echo " getVideoCodec: " . $ffmpegInstance->getVideoCodec();
echo "<br>"; echo " getAudioCodec: " . $ffmpegInstance->getAudioCodec();
echo "<br>"; echo " getAudioChannels: " . $ffmpegInstance->getAudioChannels();
echo "<br>"; echo " gethasAudio: " . $ffmpegInstance->hasAudio();
?>


Se non le volete stampare potete memorizzare le informazioni in un array e poi salvarle nel vostro DATABASE le variabili che più vi servono.

<?php
define('FFMPEG_LIBRARY', '/usr/bin/ffmpeg'); 

extension_loaded('ffmpeg') or die('Error in loading ffmpeg');

//Ricordatevi di modificare e di inserire il file del vostro video o mp3 apposto di 'clock.avi'
$ffmpegInstance = new ffmpeg_movie('clock.avi');

$array['getDuration'] =  $ffmpegInstance->getDuration();
$array['getFrameCount'] =  $ffmpegInstance->getFrameCount();
$array['getFrameRate'] =  $ffmpegInstance->getFrameRate();
$array['getFilename'] =  $ffmpegInstance->getFilename();
$array['getComment'] =  $ffmpegInstance->getComment();
$array['getTitle'] =  $ffmpegInstance->getTitle();
$array['getAuthor'] =  $ffmpegInstance->getAuthor();
$array['getCopyright'] =  $ffmpegInstance->getCopyright();
$array['getArtist'] =  $ffmpegInstance->getArtist();
$array['getGenre'] =  $ffmpegInstance->getGenre();
$array['getTrackNumber'] =  $ffmpegInstance->getTrackNumber();
$array['getYear'] =  $ffmpegInstance->getYear();
$array['getFrameHeight'] =  $ffmpegInstance->getFrameHeight();
$array['getFrameWidth'] =  $ffmpegInstance->getFrameWidth();
$array['getPixelFormat'] =  $ffmpegInstance->getPixelFormat();
$array['getBitRate'] =  $ffmpegInstance->getBitRate();
$array['getVideoBitRate'] =  $ffmpegInstance->getVideoBitRate();
$array['getAudioBitRate'] =  $ffmpegInstance->getAudioBitRate();
$array['getAudioSampleRate'] =  $ffmpegInstance->getAudioSampleRate();
$array['getVideoCodec'] =  $ffmpegInstance->getVideoCodec();
$array['getAudioCodec'] =  $ffmpegInstance->getAudioCodec();
$array['getAudioChannels'] =  $ffmpegInstance->getAudioChannels();
$array['gethasAudio'] =  $ffmpegInstance->hasAudio();

//istruzione che serve per controllare che l'array è caricato correttamente
//var_dump($array);

?>


Per prima cosa creiamo un file "php.ini" e inseriamo questa voce :

[PHP]
safe_mode = Off


Il codice è stato testato sui server di HOSTSERVICENET.COM e funziona al 100% .

Grazie alla prossima. Se avete richieste fatele e se posso vi aiuto a realizzarle.
1

Share this topic:


Pagina 1 di 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users


Copyright © 2005-2010 HostServiceNet By Euroservice-GruppoEuro P.i.v.a.: IT01012370456. All Rights Reserved.