Changeset 36038 in spip-zone


Ignore:
Timestamp:
Mar 10, 2010, 12:30:46 AM (11 years ago)
Author:
kent1@…
Message:

Améliorations diverses dont l'encodage

Location:
_plugins_/spipmotion
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spipmotion/inc/encodage.php

    r30332 r36038  
    33 * SPIPmotion
    44 * Gestion de l'encodage et des métadonnées de vidéos directement dans spip
    5  * 
     5 *
    66 * Fonction d'encodage des médias
    7  * 
     7 *
    88 * Auteurs :
    99 * Quentin Drouet
     
    1818}
    1919
    20 function encodage($source,$doc_attente){       
     20function encodage($source,$doc_attente){
    2121        /**
    2222         * On change le statut d'encodage à en_cours pour changer les messages et indiquer si nécessaire le statut
    2323         */
    2424        sql_updateq("spip_spipmotion_attentes",array('encode'=>'en_cours'),"id_spipmotion_attente=".intval($doc_attente));
    25        
     25
    2626        $attente = sql_fetsel("*","spip_spipmotion_attentes","id_spipmotion_attente=".intval($doc_attente));
    2727        $extension_attente = $attente['extension'];
     
    2929        $id_objet = $attente['id_objet'];
    3030        spip_log($attente,"spipmotion");
    31        
     31
    3232        include_spip('inc/documents');
    3333        $chemin = get_spip_doc($source['fichier']);
    3434        spip_log("encodage de $chemin","spipmotion");
    35        
     35
    3636        $fichier = basename($source['fichier']);
    3737        $string = "$fichier-$width-$height";
     
    3939        $dossier = _DIR_VAR;
    4040        $fichier_final = substr($fichier,0,-(strlen($source['extension'])+1)).'-encoded.'.$extension_attente;
    41        
     41
    4242        $fichier_temp = "$dossier$query.$extension_attente";
    4343        spip_log("le nom temporaire durant l'encodage est $fichier_temp","spipmotion");
    44        
     44
    4545        /**
    4646         * Cas d'un fichier audio
    47          */     
     47         */
    4848        if(in_array($source['extension'],lire_config('spipmotion/fichiers_audios_encodage',array()))){
    4949                /**
    50                  * Encodage du son 
     50                 * Encodage du son
    5151                 */
    5252                $encodage = find_in_path('script_bash/spipmotion.sh').' --e '.$chemin.' --s '.$fichier_temp.' --audiobitrate '.lire_config("spipmotion/bitrate_audio_$extension_attente","64").' --audiofreq '. lire_config("spipmotion/frequence_audio_$extension_attente","22050").' --p '.lire_config("spipmotion/chemin","/usr/local/bin/ffmpeg");
     
    5656                spip_log("l'encodage est terminé",'spipmotion');
    5757        }
    58        
     58
    5959        /**
    6060         * Cas d'un fichier vidéo
    61          */     
     61         */
    6262        if(in_array($source['extension'],lire_config('spipmotion/fichiers_videos_encodage',array()))){
    6363                /**
    6464                 * Calcul de la hauteur en fonction de la largeur souhaitée et de la taille de la video originale
    65                  */     
     65                 */
    6666                $width = $source['largeur'];
    6767                $height = $source['hauteur'];
    6868                $width_finale = lire_config("spipmotion/width_$extension_attente") ? lire_config("spipmotion/width_$extension_attente") : 480;
    69                
     69
    7070                if($width<$width_finale){
    7171                        $width_finale = $width;
     
    7575                        $height_finale = $source['hauteur']/($source['largeur']/$width_finale);
    7676                }
    77                
     77
    7878                spip_log("document original ($chemin) = $width/$height - document final = $width_finale/$height_finale",'spipmotion');
    79                
     79
    8080                /**
    8181                 * Définition du framerate d'encodage
    8282                 * - Si le framerate de la source est supérieur à celui de la configuration souhaité, on prend celui de la configuration
    8383                 * - Sinon on garde le même que la source
    84                  * 
     84                 *
    8585                 * TODO faire de même pour le son
    8686                 */
    87                 if(intval($source['framerate']) < lire_config("spipmotion/fps_$extension_attente","15")){
     87                if(intval($source['framerate']) && (intval($source['framerate']) < lire_config("spipmotion/fps_$extension_attente","15"))){
    8888                        $fps = $source['framerate'];
    8989                }else{
    9090                        $fps = lire_config("spipmotion/fps_$extension_attente","15");
    9191                }
    92                
     92
     93                /**
     94                 * Définition des bitrates
     95                 * On vérifie ceux de la source et on compare à ceux souhaités dans la conf
     96                 * Si la source est inférieure, on utilise ceux de la source
     97                 */
     98                if(intval($source['videobitrate']) && (intval($source['videobitrate']) < lire_config("spipmotion/bitrate_$extension_attente","448"))){
     99                        $bitrate = $source['videobitrate'];
     100                }else{
     101                        $bitrate = lire_config("spipmotion/bitrate_$extension_attente","448");
     102                }
     103
     104                if(intval($source['audiobitrate']) && (intval($source['audiobitrate']) < lire_config("spipmotion/bitrate_audio_$extension_attente","64"))){
     105                        $audiobitrate = $source['audiobitrate'];
     106                }else{
     107                        $audiobitrate = lire_config("spipmotion/bitrate_audio_$extension_attente","64");
     108                }
     109
     110                if(intval($source['audiosamplerate']) && (intval($source['audiosamplerate']) < lire_config("spipmotion/frequence_audio_$extension_attente","22050"))){
     111                        if (intval($source['audiobitrate']) < 11025){
     112                                $audiosamplerate = 11025;
     113                        }else{
     114                                $audiosamplerate = $source['audiosamplerate'];
     115                        }
     116                }else{
     117                        $audiosamplerate = lire_config("spipmotion/frequence_audio_$extension_attente","22050");
     118                }
    93119                /**
    94120                 * Encodage de la video
    95121                 */
    96                 $encodage = find_in_path('script_bash/spipmotion.sh').' --e '.$chemin.' --s '.$fichier_temp.' --size '.$width_finale.'x'.$height_finale.' --bitrate '.lire_config("spipmotion/bitrate_$extension_attente","448").' --audiobitrate '.lire_config("spipmotion/bitrate_audio_$extension_attente","64").' --audiofreq '. lire_config("spipmotion/frequence_audio_$extension_attente","22050").' --fps '.$fps.' --p '.lire_config("spipmotion/chemin","/usr/local/bin/ffmpeg");
     122                $encodage = find_in_path('script_bash/spipmotion.sh').' --e '.$chemin.' --s '.$fichier_temp.' --size '.$width_finale.'x'.$height_finale.' --bitrate '.$bitrate.' --audiobitrate '.$audiobitrate.' --audiofreq '.$audiosamplerate.' --fps '.$fps.' --p '.lire_config("spipmotion/chemin","/usr/local/bin/ffmpeg");
    97123                spip_log("$encodage",'spipmotion');
    98124                $lancement_encodage = exec($encodage,$retour);
     125
    99126                spip_log($retour,'spipmotion');
    100127                spip_log("l'encodage est terminé",'spipmotion');
    101                
    102                 if($extension_attente == 'flv'){
     128
     129                if(count($retour) > 0){
     130                        $encodage_ok = true;
     131                }
     132                if(($extension_attente == 'flv') && $encodage_ok){
    103133                        /**
    104134                         * Inscrire les metadatas dans la video finale
     
    108138                        spip_log($metadatas_flv);
    109139                }
    110                
     140
    111141        }
    112        
    113         /**
    114          * Ajout du nouveau document dans la base de donnée de SPIP
    115          * NB : la récupération des infos et du logo est faite automatiquement par
    116          * le pipeline post-edition appelé par l'ajout du document
    117          */
    118        
    119         $mode = 'document';
    120         $invalider = true;
    121142
    122         sql_updateq("spip_spipmotion_attentes",array('encode'=>'oui'),"id_spipmotion_attente=".intval($doc_attente));
     143        if($encodage_ok){
     144                /**
     145                 * Ajout du nouveau document dans la base de donnée de SPIP
     146                 * NB : la récupération des infos et du logo est faite automatiquement par
     147                 * le pipeline post-edition appelé par l'ajout du document
     148                 */
     149                $mode = 'document';
     150                $invalider = true;
    123151
    124         $ajouter_documents = charger_fonction('ajouter_documents', 'inc');
    125         $x = $ajouter_documents($fichier_temp, $fichier_final, $type_doc, $id_objet, $mode, '', $actif,'','','');
    126         spip_log("on ajoute le nouveau fichier qui devient $x","spipmotion");
    127         unlink($fichier_temp);
     152                sql_updateq("spip_spipmotion_attentes",array('encode'=>'oui'),"id_spipmotion_attente=".intval($doc_attente));
    128153
    129         sql_updateq("spip_documents",array('id_orig'=>$attente['id_document']),'id_document='.intval($x));
    130        
    131         if ($invalider) {
    132                 include_spip('inc/invalideur');
    133                 suivre_invalideur("0",true);
    134                 spip_log('invalider', 'spipmotion');
     154                $ajouter_documents = charger_fonction('ajouter_documents', 'inc');
     155                $x = $ajouter_documents($fichier_temp, $fichier_final, $type_doc, $id_objet, $mode, '', $actif,'','','');
     156                spip_log("on ajoute le nouveau fichier qui devient $x","spipmotion");
     157                unlink($fichier_temp);
     158
     159                sql_updateq("spip_documents",array('id_orig'=>$attente['id_document']),'id_document='.intval($x));
     160
     161                if ($invalider) {
     162                        include_spip('inc/invalideur');
     163                        suivre_invalideur("0",true);
     164                        spip_log('invalider', 'spipmotion');
     165                }
    135166        }
    136167
  • _plugins_/spipmotion/inc/encoder_videos.php

    r17597 r36038  
    4242                }
    4343        }
    44  
     44
    4545  // Add the redirect url when uploading via iframe
    4646
     
    6060                "$iframe$debut$res$dir_ftp$distant$fin",
    6161                " method='post' enctype='multipart/form-data' class='form_encode'");
    62                
     62
    6363        if ($v['cadre']) {
    6464                $debut_cadre = 'debut_cadre_'.$v['cadre'];
     
    7171                $res = _T('spipmotion:info_installer_encoder_ftp');
    7272                }
    73                         $res1 .= $res . $fin_cadre(true);
     73                $res1 .= $res . $fin_cadre(true);
    7474        }
    75        
     75
    7676        return "\n<div class='joindre'>".$res1."</div>\n";
    7777}
     
    8484        $fichiers = preg_files($dir);
    8585        $exts = array();
    86         $dirs = array(); 
     86        $dirs = array();
    8787        $texte_upload = array();
    8888        foreach ($fichiers as $f) {
     
    9595                                else $exts[$ext] = 'non';
    9696                        }
    97                        
     97
    9898                        $k = 2*substr_count($f,'/');
    9999                        $n = strrpos($f, "/");
     
    105105                          if (!in_array($ledossier, $dirs)) {
    106106                                $texte_upload[] = "\n<option value=\"$ledossier\">"
    107                                 . str_repeat("&nbsp;",$k) 
     107                                . str_repeat("&nbsp;",$k)
    108108                                ._T('tout_dossier_upload', array('upload' => $ledossier))
    109109                                ."</option>";
     
    118118                            $lefichier .
    119119                            "</option>";
    120                                
     120
    121121                        }
    122122                }
    123         } 
     123        }
    124124
    125125        $texte = join('', $texte_upload);
    126126        if (!$texte) {
    127                
     127
    128128        }
    129129        return $texte;
     
    140140                        "</div>";
    141141                }
    142         else { 
     142        else {
    143143        $jsfunction = '$("#encodage").css("opacity",0.5).html("'._T("spipmotion:encodage_en_cours").'");';
    144144        return
  • _plugins_/spipmotion/lang/spipmotion_fr.php

    r34710 r36038  
    33$GLOBALS[$GLOBALS['idx_lang']] = array(
    44        // C
    5         'choix_encodage_auto' => 'Les fichiers seront ajout&eacute;s automatiquement dans la file d\'attente d\'encodage d&egrave; leur insertion dans la base de donn&eacute;e',
     5        'choix_encodage_auto' => 'Les fichiers seront ajout&eacute;s automatiquement dans la file d\'attente d\'encodage d&egrave;s leur insertion dans la base de donn&eacute;e',
    66        // D
    77        'document_dans_file_attente' => 'Ce document est dans la file d\'attente pour l\'encodage',
  • _plugins_/spipmotion/script_bash/spipmotion.sh

    r30244 r36038  
    4242                assemblage="Conversion en .flv"
    4343                titredejala="Fichier de sortie existant"
    44                 textedejala="Attention, le fichier de sortie que vous avez spécifié existe déjà. 
    45 Voulez-vous l'écraser ? 
     44                textedejala="Attention, le fichier de sortie que vous avez spécifié existe déjà.
     45Voulez-vous l'écraser ?
    4646Si non, le fichier déjà présent sera renommé."
    4747                oui="oui"
     
    7070                --size) size="${2}"
    7171                shift;;
    72                 --bitrate) bitrate="${2}"
     72                --bitrate) bitrate="-vb ${2}.kb"
    7373                shift;;
    7474                --acodec) acodec="${2}"
     
    103103########### Arguments pour audio
    104104case "$audiobitrate" in
    105   "") 
     105  "")
    106106  case "$sortie" in
    107107        *".mp3") audiobitrate="-ab 128.kb" ;;
     
    112112
    113113case "$audiofreq" in
    114   "") 
     114  "")
    115115  case "$sortie" in
    116116        *".flv") audiofreq="-ar 22050" ;;
    117   esac 
     117  esac
    118118esac
    119119
     
    134134
    135135case "$bitrate" in
    136   "") bitrate="-b 448.kb"
     136  "") bitrate="-vb 448k"
    137137esac
    138138
     
    175175
    176176case "$sortie" in
    177   *".mp3"|*".flac"|*".ogg"|*".oga" ) 
    178   echo "On est dans un son" 
     177  *".mp3"|*".flac"|*".ogg"|*".oga" )
     178  echo "On est dans un son"
    179179  nice -19 "$chemin" -i $entree $acodec $audiobitrate $audiofreq -y $sortie ;;
    180   *".flv"|*".mp4"|*".ogv" ) 
     180  *".flv"|*".mp4"|*".ogv" )
    181181  echo "on est dans une video"
    182182  nice -19 "$chemin" -i $entree $acodec $vcodec -s $size $bitrate $audiobitrate $audiofreq -r $fps -y $sortie ;;
  • _plugins_/spipmotion/spipmotion_pipelines.php

    r33515 r36038  
    22/**
    33 * Insertion dans le pipeline editer_contenu_objet
    4  * 
     4 *
    55 * Affiche les boutons supplémentaires de :
    66 * - récupération de logo dans le cas d'une vidéo
     
    88 * (Dans le cas d'un son, c'est le plugin getID3 qui s'en charge)
    99 * - bouton de demande d'encodage / de réencodage du son ou de la vidéo
    10  * 
     10 *
    1111 * @param array $flux Le contexte du pipeline
    1212 * @return $flux Le contexte du pipeline complété
    1313 */
    1414function spipmotion_editer_contenu_objet($flux){
    15         if(is_array($flux['args']) && ($flux['args']['type']=='case_document')){
     15        if(is_array($flux['args']) && ($flux['args']['type'] == 'case_document')){
    1616                $id_document = $flux['args']['id'];
    1717                $document = sql_fetsel("docs.id_document, docs.id_orig, docs.extension,docs.mode,docs.distant, L.vu,L.objet,L.id_objet", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".sql_quote($id_document));
     
    2424                                        $flux['data'] .= '<p>'._T('spipmotion:version_encodee_de',array('id_orig'=>$document['id_orig'])).'</p>';
    2525                                }
    26                                 else if(extension_loaded('ffmpeg')){
     26                                if(extension_loaded('ffmpeg')){
    2727                                        $infos_videos = charger_fonction('spipmotion_infos_videos', 'inc');
    2828                                        $flux['data'] .= $infos_videos($id,$id_document,$type);
     
    3232                                if($document['id_orig'] > 0){
    3333                                        $flux['data'] .= '<p>'._T('spipmotion:version_encodee_de',array('id_orig'=>$document['id_orig'])).'</p>';
    34                                 }else{
    35                                         $infos_audios = charger_fonction('spipmotion_infos_audios', 'inc');
    36                                         $flux['data'] .= $infos_audios($id,$id_document,$type);
    3734                                }
     35                                $infos_audios = charger_fonction('spipmotion_infos_audios', 'inc');
     36                                $flux['data'] .= $infos_audios($id,$id_document,$type);
    3837                        }
    3938                }
     
    4342/**
    4443 * Pipeline Cron de SPIPmotion
    45  * 
    46  * Vérifie la présence à intervalle régulier de fichiers à encoder 
     44 *
     45 * Vérifie la présence à intervalle régulier de fichiers à encoder
    4746 * dans la file d'attente
    48  * 
     47 *
    4948 * @return L'array des taches complété
    5049 * @param array $taches_generales Un array des tâches du cron de SPIP
    5150 */
    5251function spipmotion_taches_generales_cron($taches_generales){
    53         $taches_generales['spipmotion_file'] = 60 * 4; 
     52        $taches_generales['spipmotion_file'] = 60 * 4;
    5453        return $taches_generales;
    5554}
     
    5756/**
    5857 * Insertion dans le pipeline post-edition
    59  * 
    60  * Intervient à chaque modification d'un objet de SPIP 
     58 *
     59 * Intervient à chaque modification d'un objet de SPIP
    6160 * notamment lors de l'ajout d'un document
    62  * 
     61 *
    6362 * @return $flux Le contexte de pipeline complété
    6463 * @param array $flux Le contexte du pipeline
    6564 */
    6665function spipmotion_post_edition($flux){
    67         if(in_array($flux['args']['operation'],array('ajouter_document','document_copier_local'))){
    68                 spip_log("SPIPMOTION : pipeline post_edition","spipmotion");
    69                 spip_log($flux['args'],'spipmotion');
     66        if(in_array($flux['args']['operation'], array('ajouter_document','document_copier_local'))){
    7067                $id_document = $flux['args']['id_objet'];
    71                
     68
    7269                /**
    7370                 * Il n'est pas nécessaire de récupérer la vignette d'une vignette
     
    7673                $mode = $infos_doc['mode'];
    7774                $fichier = $infos_doc['fichier'];
    78                 spip_log("SPIPMOTION : mode = $mode","spipmotion");
    79                 spip_log("SPIPMOTION : distant = ".$infos_doc['distant'],"spipmotion");
    80                
     75
    8176                if(($mode != 'vignette') && ($infos_doc['distant'] == 'non')){
    82                
    83                         spip_log("operation = ajouter_docs","spipmotion");
    8477                        $document = sql_fetsel("docs.id_document, docs.extension,docs.fichier,docs.id_orig,docs.mode,docs.distant, L.vu, L.objet, L.id_objet", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".intval($id_document));
    85                         spip_log('id_origine = '.$document['id_orig'],'emballe_medias');
    8678                        $extension = $document['extension'];
    87                        
     79
    8880                        /**
    89                          * Si nous sommes dans un format vidéo que SPIPmotion peut traiter, 
     81                         * Si nous sommes dans un format vidéo que SPIPmotion peut traiter,
    9082                         * on lui applique certains traitements
    9183                         */
    9284                        if(in_array($extension,lire_config('spipmotion/fichiers_videos',array()))){
    9385                                if (class_exists('ffmpeg_movie')) {
    94                                         spip_log("id_document=$id_document - extension = ".$document['extension'],"spipmotion");
    9586
    9687                                        /**
     
    109100                                }
    110101                        }
    111                        
     102
    112103                        /**
    113104                         * On l'ajoute dans la file d'attente d'encodage si nécessaire
     
    128119        return $flux;
    129120}
    130        
    131121?>
Note: See TracChangeset for help on using the changeset viewer.