source: spip-zone/_plugins_/spipmotion/inc/spipmotion_recuperer_infos.php @ 50673

Last change on this file since 50673 was 50673, checked in by kent1@…, 8 years ago

On est en 2011

On utilise flvtool++ si disponible sinon flvtool2

On ne met les métadonnées qu'une seule fois... à la récupération des infos de fichiers.

Incrément de version en 0.8.0 pour marquer le coup

File size: 4.6 KB
Line 
1<?php
2/**
3 * SPIPmotion
4 * Gestion de l'encodage et des métadonnées de vidéos directement dans spip
5 *
6 * Auteurs :
7 * Quentin Drouet (kent1)
8 * 2008-2011 - Distribué sous licence GNU/GPL
9 *
10 */
11
12/**
13 * Récupération des informations techniques du document audio ou video
14 * @param int $id_document
15 */
16function inc_spipmotion_recuperer_infos($id_document){
17        spip_log("SPIPMOTION : recuperation des infos du document $id_document","spipmotion");
18        if(!intval($id_document) OR ($GLOBALS['meta']['spipmotion_casse'] == 'oui'))
19                return false;
20
21        include_spip('inc/documents');
22        $document = sql_fetsel("docs.titre,docs.descriptif,docs.extension,docs.fichier,docs.taille,docs.mode", "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));
23        $chemin = $document['fichier'];
24        $movie_chemin = get_spip_doc($chemin);
25
26        /**
27         * Si c'est un flv on lui applique les metadatas pour éviter les problèmes
28         * Si c'est un mov ou MP4 on applique qt-faststart
29         */
30        if($document['extension'] == 'flv'){
31                /**
32                 * Inscrire les metadatas dans la video finale
33                 * On utilise soit :
34                 * -* flvtool++
35                 * -* flvtool2
36                 */
37                if(isset($GLOBALS['meta']['spipmotion_flvtoolplus'])){
38                        $flvtoolplus = unserialize($GLOBALS['meta']['spipmotion_flvtoolplus']);
39                }
40                if(isset($GLOBALS['meta']['spipmotion_flvtool2'])){
41                        $flvtool2 = unserialize($GLOBALS['meta']['spipmotion_flvtool2']);
42                }
43                if($flvtoolplus['flvtoolplus']){
44                        $movie_chemin_tmp = $movie_chemin.'_tmp';
45                        $metadatas_flv = "flvtool++ $movie_chemin $movie_chemin_tmp";
46                       
47                }else if($flvtool2['flvtool2']){
48                        $metadatas_flv = "flvtool2 -xUP $movie_chemin";
49                }
50                if($metadatas_flv){
51                        exec($metadatas_flv,$retour,$retour_int);
52                        if(file_exists($movie_chemin_tmp)){
53                                rename($movie_chemin_tmp,$movie_chemin);
54                        }
55                }
56        }
57        if(in_array($document['extension'],array('mov','mp4','m4v')) && !$GLOBALS['meta']['spipmotion_qt-faststart_casse']){
58                exec("qt-faststart $movie_chemin $movie_chemin._temp",$retour,$retour_int);
59                if(file_exists($movie_chemin.'._temp')){
60                        rename($movie_chemin.'._temp',$movie_chemin);
61                }
62        }
63       
64        /**
65         * Récupération des métadonnées par mediainfo et le cas échéant par la class ffmpeg-pho
66         */
67        if(!$GLOBALS['meta']['spipmotion_mediainfo_casse']){
68                $mediainfo = charger_fonction('spipmotion_mediainfo','inc');
69                $infos = $mediainfo($movie_chemin);
70        }
71        else if(class_exists('ffmpeg_movie')){
72                $movie = new ffmpeg_movie($movie_chemin, 0);
73       
74                $infos['bitrate'] = $movie->getBitRate();
75                $infos['duree'] = $movie->getDuration();
76                $infos['framecount'] = $movie->getFrameCount();
77                $infos['hauteur'] = $movie->getFrameHeight();
78                $infos['largeur'] = $movie->getFrameWidth();
79                $infos['hasvideo'] = '';
80                $infos['hasaudio'] = '';
81       
82                if($movie->hasVideo()){
83                        $infos['videocodec'] = @$movie->getVideoCodec();
84                        $infos['pixelformat'] = $movie->getPixelFormat();
85                        $infos['videobitrate'] = $movie->getVideoBitRate();
86                        $infos['framerate'] = $movie->getFrameRate();
87                        $infos['hasvideo'] = 'oui';
88                }else{
89                        $infos['hasvideo'] = 'non';
90                }
91                if($movie->hasAudio()){
92                        $infos['hasaudio'] = 'oui';
93                        $infos['audiocodec'] = @$movie->getAudioCodec();
94                        $infos['audiobitrate'] = $movie->getAudioBitRate();
95                        $infos['audiosamplerate'] = $movie->getAudioSampleRate();
96                        $infos['audiochannels'] = $movie->getAudioChannels();
97                }else{
98                        $infos['hasaudio'] = 'non';
99                }
100                if((($infos['videobitrate'] == 0)||($infos['audiobitrate'] == 0)|| ($infos['videocodec'] == 'flv')) && ($document['extension'] == 'flv')){
101                        include_spip('inc/xml');
102                        $arbre = spip_xml_parse($metadatas);
103                        if(($infos['videobitrate'] == 0)||($infos['videocodec'] == 'flv')){
104                                spip_xml_match_nodes(",^videocodecid,",$arbre, $videocodec_array);
105                                $infos['videocodec'] = $videocodec_array['videocodecid'][0];
106       
107                                spip_xml_match_nodes(",^videodatarate,",$arbre, $videobitrate_array);
108                                $infos['videobitrate'] = floor($videobitrate_array['videodatarate'][0]*1000);
109                        }
110                        if($movie->hasAudio()){
111                                spip_xml_match_nodes(",^audiocodecid,",$arbre, $audiocodec_array);
112                                $infos['audiocodec'] = $audiocodec_array['audiocodecid'][0];
113       
114                                spip_xml_match_nodes(",^audiodatarate,",$arbre, $audiobitrate_array);
115                                $infos['audiobitrate'] = floor($audiobitrate_array['audiodatarate'][0]*1000);
116                        }
117                }
118        }
119       
120        if(strlen($document['titre']) > 0){
121                unset($infos['titre']);
122        }
123        if(strlen($document['descriptif']) > 0){
124                unset($infos['descriptif']);
125        }
126        foreach($infos as $key => $val){
127                if(!$val){
128                        unset($infos[$key]);
129                }       
130        }
131        if(count($infos) > 0){
132                include_spip('inc/modifier');
133                revision_document($id_document, $infos);
134        }
135        return true;
136}
137?>
Note: See TracBrowser for help on using the repository browser.