
Recherche avancée
Médias (91)
-
Les Miserables
9 décembre 2019, par
Mis à jour : Décembre 2019
Langue : français
Type : Textuel
-
VideoHandle
8 novembre 2019, par
Mis à jour : Novembre 2019
Langue : français
Type : Video
-
Somos millones 1
21 juillet 2014, par
Mis à jour : Juin 2015
Langue : français
Type : Video
-
Un test - mauritanie
3 avril 2014, par
Mis à jour : Avril 2014
Langue : français
Type : Textuel
-
Pourquoi Obama lit il mes mails ?
4 février 2014, par
Mis à jour : Février 2014
Langue : français
-
IMG 0222
6 octobre 2013, par
Mis à jour : Octobre 2013
Langue : français
Type : Image
Autres articles (28)
-
Personnaliser les catégories
21 juin 2013, parFormulaire de création d’une catégorie
Pour ceux qui connaissent bien SPIP, une catégorie peut être assimilée à une rubrique.
Dans le cas d’un document de type catégorie, les champs proposés par défaut sont : Texte
On peut modifier ce formulaire dans la partie :
Administration > Configuration des masques de formulaire.
Dans le cas d’un document de type média, les champs non affichés par défaut sont : Descriptif rapide
Par ailleurs, c’est dans cette partie configuration qu’on peut indiquer le (...) -
HTML5 audio and video support
13 avril 2011, parMediaSPIP uses HTML5 video and audio tags to play multimedia files, taking advantage of the latest W3C innovations supported by modern browsers.
The MediaSPIP player used has been created specifically for MediaSPIP and can be easily adapted to fit in with a specific theme.
For older browsers the Flowplayer flash fallback is used.
MediaSPIP allows for media playback on major mobile platforms with the above (...) -
De l’upload à la vidéo finale [version standalone]
31 janvier 2010, parLe chemin d’un document audio ou vidéo dans SPIPMotion est divisé en trois étapes distinctes.
Upload et récupération d’informations de la vidéo source
Dans un premier temps, il est nécessaire de créer un article SPIP et de lui joindre le document vidéo "source".
Au moment où ce document est joint à l’article, deux actions supplémentaires au comportement normal sont exécutées : La récupération des informations techniques des flux audio et video du fichier ; La génération d’une vignette : extraction d’une (...)
Sur d’autres sites (3540)
-
Revision 122868 : Toujours sur ces vues de saisies fieldset. Champ extra se base sur le ...
7 mars 2020, par Maïeul Rouquette — LogToujours sur ces vues de saisies fieldset.
Champ extra se base sur le classe vide pour ne pas afficher les saisies
sans réponse. Le masquage est en css, contrairement à ce que je pensais
(suis-je bête !)
On ajoute donc la classe vide à la vie d’une saisie si l’ensemble de ses
sous saisies sont vide.
Permet d’éviter avec champ extra d’avoir un titre de fieldset qui se
balade sans aucune réponse en dessous. -
Evolution #2040 (Nouveau) : Accueil inistial sur un site nouvellement installé
1er mai 2011, par Suske -Première arrivée dans le privé : contenu/accueil.html est vide => il y a mieux que le vide :-)
un lien vers la config du site
une phrase "Créez maintenant une rubrique puis publiez-y un premier article... bla."
... Un page "premiers pas en quelques sortes (...)
-
ffmpeg.js to create mp4 from Canavas frames and transcode it
11 avril 2022, par Yordan RadevI am looking to use ffmpeg or ffmpeg.wasm inside a Vue serverless SPA which at the moment uses GIF.js. The app creates
HTMLCanvasElement
dynamically and adds them as frames to theGIF
object which is then made available for download and in the case offfmpeg
the option to transcode it to another format, say.gif
. Ideally I want to do the same withffmpeg
. My question is more how to integrateffmpeg
in my context and how to replace mygif.addFrame(composedCnv, { delay: delayInput });
with aawait ffmpeg.run( ... );
command ?

async createGIFHandler ( layer , addAllTitles , quality , delay , range ) {
 ...
 var tempGIF = new GIF({
 workers: 4,
 quality: quality,
 height: this.mapHeight + this.infoCanvas.height,
 width: this.mapWidth,
 workerScript: 'gif.worker.js'
 });
 let progressCounter = 1;
 for ( let i = range[0] ; i < range[1] ; i++, progressCounter++ ) {
 this.setDateTime( driver , driverDA[i] );
 for ( let j = 0 ; j < visibleLayers.length ; j++ ) {
 if ( visibleLayers[j].get('layerName') !== layer.Name ) {
 var tempDA = visibleLayers[j].get('layerDateArray');
 for ( let k = 0 ; k < tempDA.length ; k++ ) {
 if ( driverDA[i].getTime() === tempDA[k].getTime() ) {
 this.setDateTime( visibleLayers[j] , tempDA[k] );
 }
 }
 }
 }
 await new Promise(resolve => this.map.once('rendercomplete', resolve));
 await this.composeCanvas( tempGIF , driverDA[i] , visibleLayers , delay , widths )
 this.$store.dispatch('Layers/setGIFPercent', Math.round(((progressCounter / gifLength) * 100)))
 }

 tempGIF.on('finished', (blob) => {
 const tempURL = URL.createObjectURL( blob )
 this.$store.dispatch( 'Layers/setGIFURL' , tempURL )
 console.log('GIF Finished');
 });
 tempGIF.render();
},
async composeCanvas( gif , timeStep , visibleLayers , delayInput , widths ) {
 const mapCnv = this.getMapCanvas();
 await this.updateInfoCanvas( timeStep , widths )
 const composedCnv = await this.stitchCanvases( mapCnv , visibleLayers.length );
 await new Promise((resolve) => {
 gif.addFrame(composedCnv, { delay: delayInput });
 resolve();
 })
},