Recherche avancée

Médias (91)

Autres articles (28)

  • Personnaliser les catégories

    21 juin 2013, par

    Formulaire 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, par

    MediaSPIP 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, par

    Le 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 — Log

    Toujours 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 Radev

    I 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 the GIF object which is then made available for download and in the case of ffmpeg the option to transcode it to another format, say .gif. Ideally I want to do the same with ffmpeg. My question is more how to integrate ffmpeg in my context and how to replace my gif.addFrame(composedCnv, { delay: delayInput }); with a await 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();
    })
},