Recherche avancée

Médias (0)

Mot : - Tags -/metadatas

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (66)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

  • Contribute to a better visual interface

    13 avril 2011

    MediaSPIP is based on a system of themes and templates. Templates define the placement of information on the page, and can be adapted to a wide range of uses. Themes define the overall graphic appearance of the site.
    Anyone can submit a new graphic theme or template and make it available to the MediaSPIP community.

Sur d’autres sites (5220)

  • Anomalie #4623 : Styles des fieldset dans l’espace privé

    17 avril 2021, par RastaPopoulos ♥

    Alors c’est justement ce que je ne voulais pas générer au moins pour les groupes racines : là on se retrouve pour les fieldsets racines avec 2 bordures collées, ce qui fait super lourd visuellement il me semble : bordure du form et direct collé bordure du groupe.

    Je détaille l’argument du foncé qui était volontaire : quand il y a des décorations claires, certaines personnes (et suivant la qualité des écrans) ne les voient pas ou peu, mais ce n’est pas grave si ce n’est que de la déco. Alors qu’un élément foncé va être vu par un pourcentage bien plus grand de personnes. Comme là il s’agit d’une indication visuelle utile, et non pas juste de décoration, je trouvais donc important que ce soit foncé pour que le max de gens les voit.

    Pour les barres horizontales, là aussi c’était voulu de les enlever, afin d’alléger visuellement : là on se retrouve de nouveau avec des "cadres enfermants" de partout et donc visuellement (quand on a des yeux qui voient toutes les lignes) on a dès le premier coup d’œil cette impression de "cadres dans des cadres dans des cadres". Alors que le but des simplifications de Tcharlss était justement de minimiser le plus possible cette impression, et du coup mon but était de trouver une solution pour les fieldsets qui n’en rajoute pas dans ce domaine.

    Pour la bordure sur la droite b_b, je vais faire un essai, mais le premier truc qui me vient c’est que justement on lit à gauche, et que seulement une indentation sans bordure à gauche c’est beauuuucoup plus faible pour voir du premier coup quels champs sont regroupés avec quels autres. Ça va faire qu’on va voir le regroupement que dans un deuxième temps au lieu de le voir au début de chaque ligne.

  • Documentation #3027 : Squelette Spip.net

    18 novembre 2013, par Arnaud Dupin de Beyssat

    Bonjour
    Merci de la réponse.
    Il s’agit notammen t du menu latéral de la page
    http://www.spip.net/fr_rubrique135.html et des suivantes (filrtres,
    critères ; etc.)
    sans doute associéà

    <a class="external" href="http://www.spip.net/">www.spip.net</a><br />  /squelettes<br />  /branches<br />  /2008<br />  /inc-rubriques.html

    Merci
    ADB

    Le 16/07/2013 10:35, a écrit :

    La demande #3027 a été mise à jour par b b.

    Salut, de quelle page du site s’agit-il ?


    Evolution #3027 : Squelette Spip.net

    • Auteur : Arnaud Dupin de Beyssat
    • Statut : Nouveau
    • Priorité : Normal
    • Assigné à :
    • Catégorie :
    • Version cible :
    • Resolution :

    Bonjour
    Serait-il possible de passer la liste des rubriques du menu latéral
    ordonné en alphabétique ? Cela faciliterait les recherches de balises, etc.
    Actuellement, les lignes sont :
    12
    13 id_rubriqueid_rubrique=#ENVid_rubrique par num titre !par date
    doublons>
    14 #TITRE
    15

    A la ligne 13, passer en par nom ai lieu de par num titre !par date

    Merci


    Vous recevez ce mail car vous êtes impliqués sur ce projet.
    Pour changer les préférences d’envoi de mail, allez sur
    http://core.spip.org/my/account

  • ffmpeg exit code 429496724 when opening file with {} in name

    16 février, par Holly Wilson

    I'm trying to write a program that will read the names of files in a directory, and parse them for info which it will then write into that file's metadata (seems pointless, I know, but it's more of a trial run for a larger project. If I can figure this out, then I'll be ready to move on to what I actually want to do).&#xA;All of my filenames are formatted :

    &#xA;

    Title, Article* - Subtitle* Cut* [Year]&#xA;*if present

    &#xA;

    The four test videos I'm using are titled :

    &#xA;

    Test Video 1 [2000]

    &#xA;

    Test Video 2, A [2000]

    &#xA;

    Test Video 3 Test Cut [2000]

    &#xA;

    Test Video 4 - The Testening [2000]

    &#xA;

    The code seems to be working fine on videos 1, 2, & 4 ; but video 3 is causing me a lot of headache.

    &#xA;

    //node C:\Users\User\Documents\Coding\Tools\testMDG.js&#xA;const fs = require(&#x27;fs&#x27;);&#xA;const path = require(&#x27;path&#x27;);&#xA;const ffmpeg = require(&#x27;fluent-ffmpeg&#x27;);&#xA;const async = require(&#x27;async&#x27;);&#xA;const directory = path.normalize(&#x27;F:\\Movies &amp; TV\\Movies\\testDir&#x27;);&#xA;let x = 0;&#xA;const fileArray = [];&#xA;const succArray = [];&#xA;const failArray = [];&#xA;// Set the path to the ffmpeg executable&#xA;ffmpeg.setFfmpegPath(path.normalize(&#x27;C:\\ffmpeg\\bin\\ffmpeg.exe&#x27;));&#xA;&#xA;// Add this near the start of your script&#xA;const tempDir = path.join(directory, &#x27;temp&#x27;);&#xA;if (!fs.existsSync(tempDir)) {&#xA;    fs.mkdirSync(tempDir, { recursive: true });&#xA;}&#xA;&#xA;const progresscsv = path.normalize(&#x27;C:\\Users\\User\\Documents\\Coding\\Tools\\progress.csv&#x27;);&#xA;if (fs.existsSync(progresscsv)) {&#xA;    fs.unlinkSync(progresscsv);&#xA;};&#xA;&#xA;const csvStream = fs.createWriteStream(progresscsv);&#xA;csvStream.write(&#x27;File Name,Status\n&#x27;);&#xA;&#xA;const CONCURRENCY_LIMIT = 3; // Adjust based on your system capabilities&#xA;&#xA;// Add at the start of your script&#xA;const processedFiles = new Set();&#xA;&#xA;function sanitizeFilePath(filePath) {&#xA;    return filePath.replace(/([{}])/g, &#x27;\\$1&#x27;);&#xA;}&#xA;&#xA;// Create a queue&#xA;const queue = async.queue(async (task, callback) => {&#xA;    const { file, filePath, tempFilePath, movieMetadata } = task;&#xA;    try {&#xA;        await new Promise((resolve, reject) => {&#xA;            console.log(`ffmpeg reading: ${sanitizeFilePath(filePath)}`);&#xA;            ffmpeg(sanitizeFilePath(filePath))&#xA;                .outputOptions([&#xA;                    &#x27;-y&#x27;,&#xA;                    &#x27;-c&#x27;, &#x27;copy&#x27;,&#xA;                    &#x27;-map&#x27;, &#x27;0&#x27;,&#xA;                    &#x27;-metadata&#x27;, `title=${movieMetadata.title}`,&#xA;                    &#x27;-metadata&#x27;, `subtitle=${movieMetadata.subtitle || &#x27;&#x27;}`,&#xA;                    &#x27;-metadata&#x27;, `comment=${movieMetadata.cut || &#x27;&#x27;}`,&#xA;                    &#x27;-metadata&#x27;, `year=${movieMetadata.year}`&#xA;                ])&#xA;                .on(&#x27;error&#x27;, (err) => reject(err))&#xA;                .on(&#x27;end&#x27;, () => resolve())&#xA;                .saveToFile(tempFilePath);&#xA;        });&#xA;        &#xA;        // Handle success&#xA;        console.log(`Successfully processed: ${file}`);&#xA;        succArray.push(file);&#xA;        // Only call callback once&#xA;        if (callback &amp;&amp; typeof callback === &#x27;function&#x27;) {&#xA;            callback();&#xA;        }&#xA;    } catch (err) {&#xA;        // Handle error&#xA;        console.error(`Error processing ${file}: ${err.message}`);&#xA;        failArray.push(file);&#xA;        // Only call callback once with error&#xA;        if (callback &amp;&amp; typeof callback === &#x27;function&#x27;) {&#xA;            callback(err);&#xA;        }&#xA;    }&#xA;}, CONCURRENCY_LIMIT);&#xA;&#xA;fs.readdir(directory, (err, files) => {&#xA;    if (err) {&#xA;        console.error(`Error reading directory: ${err.message}`);&#xA;        return;&#xA;    }&#xA;    console.log(directory);&#xA;&#xA;    // Filter for files only&#xA;    files = files.filter(file => fs.statSync(path.join(directory, file)).isFile());&#xA;    console.log(files);&#xA;&#xA;    for (const file of files) {&#xA;        x&#x2B;&#x2B;;&#xA;        const filePath = path.join(directory, file);&#xA;        let desort = file.replace(/(.*),\s(the\s|an\s|a\s)/i, &#x27;$2&#x27;&#x2B;&#x27;$1 &#x27;) || file;&#xA;        &#xA;        // Create task object for queue&#xA;        const task = {&#xA;            file,&#xA;            filePath: filePath,&#xA;            tempFilePath: path.join(directory, &#x27;temp&#x27;, `temp_${x}_${path.parse(file).name&#xA;                .replace(/[^a-zA-Z0-9]/g, &#x27;_&#x27;)}${path.extname(file)}`),&#xA;            movieMetadata: {&#xA;                title: desort.replace(/(\s[\-\{\[].*)/gi, ``),&#xA;                subtitle: desort.includes(&#x27;-&#x27;) ? desort.replace(/(.*)\-\s(.*?)[\{\[].*/gi, &#x27;$2&#x27;) : null,&#xA;                cut: desort.includes(&#x27;{&#x27;) ? desort.replace(/.*\{(.*)\}.*/gi, &#x27;$1&#x27;) : null,&#xA;                year: desort.replace(/.*\[(.*)\].*/gi, &#x27;$1&#x27;)&#xA;            }&#xA;        };&#xA;        &#xA;        // Add to processing queue&#xA;        queue.push(task, (err) => {&#xA;            if (!processedFiles.has(task.file)) {&#xA;                processedFiles.add(task.file);&#xA;                if (err) {&#xA;                    csvStream.write(`${task.file},Failed\n`);&#xA;                } else {&#xA;                    csvStream.write(`${task.file},Processed\n`);&#xA;                }&#xA;            }&#xA;        });&#xA;    }&#xA;});&#xA;&#xA;// Add queue completion handler&#xA;queue.drain(() => {&#xA;    console.log(&#x27;All files have been processed&#x27;);&#xA;    console.log(`Success: ${succArray.length} files: ${succArray}`);&#xA;    console.log(`Failed: ${failArray.length} files: ${failArray}`);&#xA;});&#xA;&#xA;//node C:\Users\User\Documents\Coding\Tools\testMDG.js&#xA;

    &#xA;

    And the console is logging :

    &#xA;

    PS C:\Users\User> node C:\Users\User\Documents\Coding\Tools\testMDG.js&#xA;F:\Movies &amp; TV\Movies\testDir&#xA;[&#xA;  &#x27;Test Video 1 [2020].mp4&#x27;,&#xA;  &#x27;Test Video 2, A [2020].mp4&#x27;,&#xA;  &#x27;Test Video 3 {Test Cut} [2020].mp4&#x27;,&#xA;  &#x27;Test Video 4 - The Testening [2020].mp4&#x27;&#xA;]&#xA;ffmpeg reading: F:\Movies &amp; TV\Movies\testDir\Test Video 1 [2020].mp4&#xA;ffmpeg reading: F:\Movies &amp; TV\Movies\testDir\Test Video 2, A [2020].mp4&#xA;ffmpeg reading: F:\Movies &amp; TV\Movies\testDir\Test Video 3 \{Test Cut\} [2020].mp4&#xA;Error processing Test Video 3 {Test Cut} [2020].mp4: ffmpeg exited with code 4294967294: Error opening input file F:\Movies &amp; TV\Movies\testDir\Test Video 3 \{Test Cut\} [2020].mp4.&#xA;Error opening input files: No such file or directory&#xA;&#xA;ffmpeg reading: F:\Movies &amp; TV\Movies\testDir\Test Video 4 - The Testening [2020].mp4&#xA;Successfully processed: Test Video 1 [2020].mp4&#xA;Successfully processed: Test Video 2, A [2020].mp4&#xA;Successfully processed: Test Video 4 - The Testening [2020].mp4&#xA;All files have been processed&#xA;Success: 3 files: Test Video 1 [2020].mp4,Test Video 2, A [2020].mp4,Test Video 4 - The Testening [2020].mp4&#xA;Failed: 1 files: Test Video 3 {Test Cut} [2020].mp4&#xA;

    &#xA;

    I've tried so many different solutions in the sanitizeFilePath function. Escaping the {} characters (as included below), escaping all non-alphanumeric characters, putting the filepath in quotes, etc. VSCode's CoPilot is just pulling me round in circles, suggesting solutions I've already tried.

    &#xA;