Accueil > > > ENCODAGE ET TRAITEMENT DE AUTOMATIQUE DE VIDÉOS EN UPLOAD
ENCODAGE ET TRAITEMENT DE AUTOMATIQUE DE VIDÉOS EN UPLOAD
Information sur la source
Description
Bon, voici mon premier code ... Voila, je viens de développer cette source qui peut etre utile pour l'upload de vidéo. Grace à un formulaire, on upload une vidéo dans n'importe quel format (j'ai limité à 7-8 formats dans mon cas), on la redimensionne à la taille souhaitée (pour moi 350x250) , on la coupe au moment voulu (40 secondes dans mon exemple), et plus important, on la ressort dans n'importe quel format. Ce code, utilise le logiciel ffmpeg librement accessible. Dans mon exemple je travail pour un réencodage en flv mais il y a de tres nombreuses autres finalité, je vous invite a consulter le manuel de ffmpeg pour vous en rendre compte par vous même. Liste des formats supportés et le manuel de ffmpeg : http://ffmpeg.sourceforge.net/ffmpeg-doc.html#SEC1 9 pour toute question ou suggestion : yaug_worm@hotmail.com Merci
Source
- <?php
-
- //===================================
- //on fixe les variables de php.ini :
- //===================================
- $res_ini = @ini_set ("MAX_INPUT_TIME", 1200);
- @set_time_limit (1200);
-
-
- //===================================
- //obtention de l'extension
- //===================================
- function getextension($fichier) {
- $bouts = explode(".", $fichier);
- $extension = array_pop($bouts);
- $extension = strtoupper ($extension);
- return $extension;
- }//getextension ()
-
- //==================================================
- //supression de l'extension dans le nom d'un fichier
- //==================================================
- function supprextension ($fichier) {
- $fichier= substr ( $fichier, 0, strrpos($fichier, "."));
- return $fichier;
- }//supprextension ()
-
- //=====================================
- //initialisation des vars et tableaux
- //=====================================
- $traitable = false;
- $is_ext_ok = false;
- $path_ffmpeg = "ffmpeg/ffmpeg";
- $ext_admise = array ("MOV", "AVI", "MWV", "DV", "MPG", "MPEG", "FLV", "DIVX");
- $taille = false;
-
- for ($i=0; $i<3; $i++)
- {
- echo "<br>$i<br>";
- $fichier = "fichier".($i+1);
- $source = $_FILES[$fichier]["tmp_name"];
- $nom_fic = $_FILES[$fichier]["name"];
- $size = $_FILES[$fichier]["size"];
- $destination = "./tmp2/".$nom_fic; //dossier destination
- $nom_final = supprextension ($nom_fic);
-
- if ($size < 25000000)
- {
- echo "<br>taille : $taille<br>size : $size<br>";
- $taille = true;
- }//if ()
-
- //sortie des qu'il n'y a plus de fichier dans la file d'attente.
- if (!file_exists($source))
- {
- echo "<br>sortie<br>";
- continue;
- }//if ()
-
-
- //=================================
- //initialisation des fichiers logs
- //=================================
- $nomlogerror = "./log/logerror".$nom_final.".txt";
- $nomlogconnect ="./log/logconnect".$nom_final.".txt";
- $logerrorpt = @fopen ($nomlogerror, "at");
- $logconnectpt = @fopen ($nomlogconnect, "at");
-
- if (is_writable($nomlogerror))
- {
- if (!$logerrorpt)
- {
- echo "<br>impossible d'ouvrir le fichier logerror<br>";
- exit ;
- }//if ()
- else
- {
- $res_write = fwrite ($logerrorpt, "erreurs apparues lors de l'upload et du traitement :\r\n" );
- }//else
- }//if
- else
- {
-
- echo "<br>fichier non accessible<br>";
- }//else
- if (is_writable($nomlogconnect))
- {
- if (!$logconnectpt)
- {
- $res_write = fwrite ($logerrorpt, "Impossible d'ouvrir $nomlogconnect\r\n");
- exit;
- }//if
- else
- {
- if (!$res_write = fwrite ($logconnectpt, "compte rendu de l'upload et du traitement de la vidéo\r\n\r\n"))
- {
- $res_write = fwrite ($logerrorpt, "\r\nImpossible d'ecrire dans $nomlogconnect\r\n");
- }//if ()
-
- }//else
- }
- else
- {
- $res_write = fwrite ($logerrorpt, "fichier $nomlogconnect non accessible\r\n");
- }//else
-
- //=========================================
- //vérification de l'existence de la vidéo
- //=========================================
- if (file_exists ("./film_flv/".$nom_final.".flv"))
- {
- $res_write = fwrite ($logerrorpt, "\r\nla vidéo $nom_fic a déjà été uploadée et traitée, arret de l'upload\r\n");
- $res_write = fwrite ($logconnectpt, "\r\nla vidéo $nom_fic a déjà été uploadée et traitée, arret de l'upload\r\n");
- continue;
- }//if ()
-
-
-
- //==================
- //test de la vidéo
- //==================
-
- $extension = getextension ($nom_fic);
- echo "<br>extension: $extension<br>";
- $res_write = fwrite ($logconnectpt, "dossier source : $source \r\n ");
- $res_write = fwrite ($logconnectpt, "nom du fichier : $nom_fic\r\n");
- $res_write = fwrite ($logconnectpt, "nom du fichier destination : $destination\r\n");
- $res_write = fwrite ($logconnectpt, "extension : $extension \r\n");
- $res_write = fwrite ($logconnectpt, "taille : $size\r\n");
-
-
- if (!in_array ($extension, $ext_admise))
- {
- echo "<br>Attention, le fichier que vous venez de sélectionner n'est pas une vidéo au format valide.<br>";
- echo "Les formats utilisables sont : AVI, MPEG, DIVX, MOV, FLV, DV, WMV merci de compresser votre vidéo au format voulu.<br>";
- $res_write = fwrite ($logerrorpt, "\r\nformat vidéo non adapté, extension de la vidéo : $extension, upload arrété \r\n");
- }//if ()
- else
- {
- $res_write = fwrite ($logconnectpt, "\r\nextension de la vidéo ok, poursuite de l'upload \r\n");
- if (/*$size> 26214400*/!$taille)
- {
- echo "<br>Impossible de charger $nom_fic, cette vidéo fait plus de 25Mo, merci de réduire la taille de votre vidéo<br>" ;
- $res_write = fwrite ($logerrorpt, "\r\nla taille de la vidéo $nom_fic est de $size et supérieure à 25Mo, arret de l'upload\r\n");
- continue;
- }//if ()
- else
- {
- $res_write = fwrite ($logconnectpt, "\r\ntaille de la vidéo ok, poursuite de l'upload \r\n");
- $is_ext_ok = true;
- }//else
- }//else
-
-
- //==================
- //Début de l'upload
- //==================
- if ($is_ext_ok)
- {
- $res_write = fwrite ($logconnectpt, "\r\ndebut de l'upload de la vidéo \r\n");
- $result = move_uploaded_file( $source, $destination);
- $res_write = fwrite ($logconnectpt, "\r\nresultat de move_upload_file = $result\r\n");
-
- $erreur = $_FILES[$fichier]['error'];
- echo "<br>erreur : $erreur<br>";
- if (!$result)
- {
- $res_write = fwrite ($logerrorpt, "erreur lors de l'upload : ");
- switch ($erreur)
- {
- case 1: // UPLOAD_ERR_INI_SIZE
- $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_INI_SIZE\r\n");
- echo "Attention le fichier dépasse la taille autorisée par le serveur<br>";
- break;
- case 2: //UPLOAD_ERR_FORM_SIZE
- $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_FORM_SIZE\r\n");
- echo "Attention le fichier dépasse la taille autorisée par le formulaire<br>";
- break;
- case 3: //UPLOAD_ERR_PARTIAL
- $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_PARTIAL\r\n");
- echo "Attention, l'upload du fichier a été interrompu<br>";
- break;
- case 4: // UPLOAD_ERR_NO_FILE
- $res_write = fwrite ($logerrorpt, "UPLOAD_ERR_NO_FILE\r\n");
- echo "Attention, le fichier envoyé à une taille nulle<br>";
- break;
- }//switch ()
- $res_write = fwrite ($logconnectpt, "\r\nune erreur est survenue lors de l'upload de $nom_fic, consultez le log erreur\r\n");
- continue;
- }
- else
- {
- $traitable = true;
- $res_write = fwrite ($logconnectpt, "\r\nfichier uploadé, début du traitement de la vidéo\r\n");
- }
- }//if ()
-
- //===================================
- //Phase de traitement de la vidéo
- //===================================
- if ($traitable&&$is_ext_ok)
- {
- $res_write = fwrite ($logconnectpt, "\r\ndebut du traitement de la vidéo\r\n");
- $mod=chmod ($destination, 0770);
-
- //vérification, si le son doit être inclu
- if ($_POST['son1'] == 1)
- {
- $res_write = fwrite ($logconnectpt, "\r\nson sélectionné\r\n");
- $commande = "$path_ffmpeg -y -i $destination -t 00:00:40 -vcodec flv -s 350x250 -acodec mp3 ./film_flv/".$nom_final.".flv";
- }
- else
- {
- $res_write = fwrite ($logconnectpt, "son non sélectionné\r\n");
- $commande = "./ffmpeg/ffmpeg -y -i $destination -t 00:00:40 -f flv -an -vcodec flv -s 350x250 ./film_flv/".$nom_final.".flv";
- }//else
-
- $res = system ($commande, $res_var);
- $res_write = fwrite ($logconnectpt, "\r\ncommande à executer : $commande \r\n\r\n");
-
- if ($res_var == 0)
- {
- $res_write = fwrite ($logconnectpt, "\r\nla vidéo $nom_fic a bien été traitée\r\ndébut de la suppression de la vidéo uploadée\r\n");
- $bool = unlink ($destination);
- if ($bool)
- {
- $res_write = fwrite ($logconnectpt, "\r\n$destination supprimée avec succés\r\n");
- }//if ()
- else
- {
- $res_write = fwrite ($logerrorpt, "\r\n$destination non supprimée\r\n");
- }//else
- }//if ()
- else
- {
- $res_write = fwrite ($logerrorpt, "\r\nerreur lors de l'encodage... vidéo $destination non supprimée\r\n");
- exit;
- }//else
-
- $bool = unlink($nomlogerror);
- if ($bool)
- {
- $res_write = fwrite ($logconnectpt, "\r\nle fichier $nomlogerror a été supprimé avec succès\r\n");
- }//if ()
- }//if ()
-
- }//for
-
- ?>
<?php
//===================================
//on fixe les variables de php.ini :
//===================================
$res_ini = @ini_set ("MAX_INPUT_TIME", 1200);
@set_time_limit (1200);
//===================================
//obtention de l'extension
//===================================
function getextension($fichier) {
$bouts = explode(".", $fichier);
$extension = array_pop($bouts);
$extension = strtoupper ($extension);
return $extension;
}//getextension ()
//==================================================
//supression de l'extension dans le nom d'un fichier
//==================================================
function supprextension ($fichier) {
$fichier= substr ( $fichier, 0, strrpos($fichier, "."));
return $fichier;
}//supprextension ()
//=====================================
//initialisation des vars et tableaux
//=====================================
$traitable = false;
$is_ext_ok = false;
$path_ffmpeg = "ffmpeg/ffmpeg";
$ext_admise = array ("MOV", "AVI", "MWV", "DV", "MPG", "MPEG", "FLV", "DIVX");
$taille = false;
for ($i=0; $i<3; $i++)
{
echo "<br>$i<br>";
$fichier = "fichier".($i+1);
$source = $_FILES[$fichier]["tmp_name"];
$nom_fic = $_FILES[$fichier]["name"];
$size = $_FILES[$fichier]["size"];
$destination = "./tmp2/".$nom_fic; //dossier destination
$nom_final = supprextension ($nom_fic);
if ($size < 25000000)
{
echo "<br>taille : $taille<br>size : $size<br>";
$taille = true;
}//if ()
//sortie des qu'il n'y a plus de fichier dans la file d'attente.
if (!file_exists($source))
{
echo "<br>sortie<br>";
continue;
}//if ()
//=================================
//initialisation des fichiers logs
//=================================
$nomlogerror = "./log/logerror".$nom_final.".txt";
$nomlogconnect ="./log/logconnect".$nom_final.".txt";
$logerrorpt = @fopen ($nomlogerror, "at");
$logconnectpt = @fopen ($nomlogconnect, "at");
if (is_writable($nomlogerror))
{
if (!$logerrorpt)
{
echo "<br>impossible d'ouvrir le fichier logerror<br>";
exit ;
}//if ()
else
{
$res_write = fwrite ($logerrorpt, "erreurs apparues lors de l'upload et du traitement :\r\n" );
}//else
}//if
else
{
echo "<br>fichier non accessible<br>";
}//else
if (is_writable($nomlogconnect))
{
if (!$logconnectpt)
{
$res_write = fwrite ($logerrorpt, "Impossible d'ouvrir $nomlogconnect\r\n");
exit;
}//if
else
{
if (!$res_write = fwrite ($logconnectpt, "compte rendu de l'upload et du traitement de la vidéo\r\n\r\n"))
{
$res_write = fwrite ($logerrorpt, "\r\nImpossible d'ecrire dans $nomlogconnect\r\n");
}//if ()
}//else
}
else
{
$res_write = fwrite ($logerrorpt, "fichier $nomlogconnect non accessible\r\n");
}//else
//=========================================
//vérification de l'existence de la vidéo
//=========================================
if (file_exists ("./film_flv/".$nom_final.".flv"))
{
$res_write = fwrite ($logerrorpt, "\r\nla vidéo $nom_fic a déjà été uploadée et traitée, arret de l'upload\r\n");
$res_write = fwrite ($logconnectpt, "\r\nla vidéo $nom_fic a déjà été uploadée et traitée, arret de l'upload\r\n");
continue;
}//if ()
//==================
//test de la vidéo
//==================
$extension = getextension ($nom_fic);
echo "<br>extension: $extension<br>";
$res_write = fwrite ($logconnectpt, "dossier source : $source \r\n ");
$res_write = fwrite ($logconnectpt, "nom du fichier : $nom_fic\r\n");
$res_write = fwrite ($logconnectpt, "nom du fichier destination : $destination\r\n");
$res_write = fwrite ($logconnectpt, "extension : $extension \r\n");
$res_write = fwrite ($logconnectpt, "taille : $size\r\n");
if (!in_array ($extension, $ext_admise))
{
echo "<br>Attention, le fichier que vous venez de sélectionner n'est pas une vidéo au format valide.<br>";
echo "Les formats utilisables sont : AVI, MPEG, DIVX, MOV, FLV, DV, WMV merci de compresser votre vidéo au format voulu.<br>";
$res_write = fwrite ($logerrorpt, "\r\nformat vidéo non adapté, extension de la vidéo : $extension, upload arrété \r\n");
}//if ()
else
{
$res_write = fwrite ($logconnectpt, "\r\nextension de la vidéo ok, poursuite de l'upload \r\n");
if (/*$size> 26214400*/!$taille)
{
echo "<br>Impossible de charger $nom_fic, cette vidéo fait plus de 25Mo, merci de réduire la taille de votre vidéo<br>" ;
$res_write = fwrite ($logerrorpt, "\r\nla taille de la vidéo $nom_fic est de $size et supérieure à 25Mo, arret de l'upload\r\n");
continue;
}//if ()
else
{
$res_write = fwrite ($logconnectpt, "\r\ntaille de la vidéo ok, poursuite de l'upload \r\n");
$is_ext_ok = true;
}//else
}//else
//==================
//Début de l'upload
//==================
if ($is_ext_ok)
{
$res_write = fwrite ($logconnectpt, "\r\ndebut de l'upload de la vidéo \r\n");
$result = move_uploaded_file( $source, $destination);
$res_write = fwrite ($logconnectpt, "\r\nresultat de move_upload_file = $result\r\n");
$erreur = $_FILES[$fichier]['error'];
echo "<br>erreur : $erreur<br>";
if (!$result)
{
$res_write = fwrite ($logerrorpt, "erreur lors de l'upload : ");
switch ($erreur)
{
case 1: // UPLOAD_ERR_INI_SIZE
$res_write = fwrite ($logerrorpt, "UPLOAD_ERR_INI_SIZE\r\n");
echo "Attention le fichier dépasse la taille autorisée par le serveur<br>";
break;
case 2: //UPLOAD_ERR_FORM_SIZE
$res_write = fwrite ($logerrorpt, "UPLOAD_ERR_FORM_SIZE\r\n");
echo "Attention le fichier dépasse la taille autorisée par le formulaire<br>";
break;
case 3: //UPLOAD_ERR_PARTIAL
$res_write = fwrite ($logerrorpt, "UPLOAD_ERR_PARTIAL\r\n");
echo "Attention, l'upload du fichier a été interrompu<br>";
break;
case 4: // UPLOAD_ERR_NO_FILE
$res_write = fwrite ($logerrorpt, "UPLOAD_ERR_NO_FILE\r\n");
echo "Attention, le fichier envoyé à une taille nulle<br>";
break;
}//switch ()
$res_write = fwrite ($logconnectpt, "\r\nune erreur est survenue lors de l'upload de $nom_fic, consultez le log erreur\r\n");
continue;
}
else
{
$traitable = true;
$res_write = fwrite ($logconnectpt, "\r\nfichier uploadé, début du traitement de la vidéo\r\n");
}
}//if ()
//===================================
//Phase de traitement de la vidéo
//===================================
if ($traitable&&$is_ext_ok)
{
$res_write = fwrite ($logconnectpt, "\r\ndebut du traitement de la vidéo\r\n");
$mod=chmod ($destination, 0770);
//vérification, si le son doit être inclu
if ($_POST['son1'] == 1)
{
$res_write = fwrite ($logconnectpt, "\r\nson sélectionné\r\n");
$commande = "$path_ffmpeg -y -i $destination -t 00:00:40 -vcodec flv -s 350x250 -acodec mp3 ./film_flv/".$nom_final.".flv";
}
else
{
$res_write = fwrite ($logconnectpt, "son non sélectionné\r\n");
$commande = "./ffmpeg/ffmpeg -y -i $destination -t 00:00:40 -f flv -an -vcodec flv -s 350x250 ./film_flv/".$nom_final.".flv";
}//else
$res = system ($commande, $res_var);
$res_write = fwrite ($logconnectpt, "\r\ncommande à executer : $commande \r\n\r\n");
if ($res_var == 0)
{
$res_write = fwrite ($logconnectpt, "\r\nla vidéo $nom_fic a bien été traitée\r\ndébut de la suppression de la vidéo uploadée\r\n");
$bool = unlink ($destination);
if ($bool)
{
$res_write = fwrite ($logconnectpt, "\r\n$destination supprimée avec succés\r\n");
}//if ()
else
{
$res_write = fwrite ($logerrorpt, "\r\n$destination non supprimée\r\n");
}//else
}//if ()
else
{
$res_write = fwrite ($logerrorpt, "\r\nerreur lors de l'encodage... vidéo $destination non supprimée\r\n");
exit;
}//else
$bool = unlink($nomlogerror);
if ($bool)
{
$res_write = fwrite ($logconnectpt, "\r\nle fichier $nomlogerror a été supprimé avec succès\r\n");
}//if ()
}//if ()
}//for
?>
Conclusion
bon voila, une ptite mise a jour, le code est mieux structuré et j'ai ajouté la gestion des journaux de connections et d'erreur pour une application serveur (ce qui sera le cas au final.
EDIT :
J'ai rajouté dans le zip le code (refait), plus les 2 formulaires. La nouvelle version du code permet l'envoi de plusieurs vidéos a la fois... enfin c'est seulement une fonctionnalité donc j'avais besoin...
Dans mon cas, il me reste malheureusement un unique problème, il est apparement impossible d'avoir du son dans le flv final lorsque la vidéo uploadée est au format mpg... je vais peut etre trouver une solution (après des heures de bidouillages en tout genre) mais ca risque d'allourdir un peu le code et le temps de traitement.. m'enfin au moins il sera complet comme ca ..
voila merci
Historique
- 13 avril 2005 17:18:44 :
- optimisation, ajout fonctionnalité
- 14 avril 2005 15:22:46 :
- ajout du zip
envoi multiple de vidéos
- 14 avril 2005 15:33:47 :
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|