
Recherche avancée
Autres articles (66)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains 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 2013Puis-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 2011MediaSPIP 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 BeyssatBonjour
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
ADBLe 16/07/2013 10:35, redmine@spip.org 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
15A 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 WilsonI'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).
All of my filenames are formatted :


Title, Article* - Subtitle* Cut* [Year]
*if present


The four test videos I'm using are titled :


Test Video 1 [2000]


Test Video 2, A [2000]


Test Video 3 Test Cut [2000]


Test Video 4 - The Testening [2000]


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


//node C:\Users\User\Documents\Coding\Tools\testMDG.js
const fs = require('fs');
const path = require('path');
const ffmpeg = require('fluent-ffmpeg');
const async = require('async');
const directory = path.normalize('F:\\Movies & TV\\Movies\\testDir');
let x = 0;
const fileArray = [];
const succArray = [];
const failArray = [];
// Set the path to the ffmpeg executable
ffmpeg.setFfmpegPath(path.normalize('C:\\ffmpeg\\bin\\ffmpeg.exe'));

// Add this near the start of your script
const tempDir = path.join(directory, 'temp');
if (!fs.existsSync(tempDir)) {
 fs.mkdirSync(tempDir, { recursive: true });
}

const progresscsv = path.normalize('C:\\Users\\User\\Documents\\Coding\\Tools\\progress.csv');
if (fs.existsSync(progresscsv)) {
 fs.unlinkSync(progresscsv);
};

const csvStream = fs.createWriteStream(progresscsv);
csvStream.write('File Name,Status\n');

const CONCURRENCY_LIMIT = 3; // Adjust based on your system capabilities

// Add at the start of your script
const processedFiles = new Set();

function sanitizeFilePath(filePath) {
 return filePath.replace(/([{}])/g, '\\$1');
}

// Create a queue
const queue = async.queue(async (task, callback) => {
 const { file, filePath, tempFilePath, movieMetadata } = task;
 try {
 await new Promise((resolve, reject) => {
 console.log(`ffmpeg reading: ${sanitizeFilePath(filePath)}`);
 ffmpeg(sanitizeFilePath(filePath))
 .outputOptions([
 '-y',
 '-c', 'copy',
 '-map', '0',
 '-metadata', `title=${movieMetadata.title}`,
 '-metadata', `subtitle=${movieMetadata.subtitle || ''}`,
 '-metadata', `comment=${movieMetadata.cut || ''}`,
 '-metadata', `year=${movieMetadata.year}`
 ])
 .on('error', (err) => reject(err))
 .on('end', () => resolve())
 .saveToFile(tempFilePath);
 });
 
 // Handle success
 console.log(`Successfully processed: ${file}`);
 succArray.push(file);
 // Only call callback once
 if (callback && typeof callback === 'function') {
 callback();
 }
 } catch (err) {
 // Handle error
 console.error(`Error processing ${file}: ${err.message}`);
 failArray.push(file);
 // Only call callback once with error
 if (callback && typeof callback === 'function') {
 callback(err);
 }
 }
}, CONCURRENCY_LIMIT);

fs.readdir(directory, (err, files) => {
 if (err) {
 console.error(`Error reading directory: ${err.message}`);
 return;
 }
 console.log(directory);

 // Filter for files only
 files = files.filter(file => fs.statSync(path.join(directory, file)).isFile());
 console.log(files);

 for (const file of files) {
 x++;
 const filePath = path.join(directory, file);
 let desort = file.replace(/(.*),\s(the\s|an\s|a\s)/i, '$2'+'$1 ') || file;
 
 // Create task object for queue
 const task = {
 file,
 filePath: filePath,
 tempFilePath: path.join(directory, 'temp', `temp_${x}_${path.parse(file).name
 .replace(/[^a-zA-Z0-9]/g, '_')}${path.extname(file)}`),
 movieMetadata: {
 title: desort.replace(/(\s[\-\{\[].*)/gi, ``),
 subtitle: desort.includes('-') ? desort.replace(/(.*)\-\s(.*?)[\{\[].*/gi, '$2') : null,
 cut: desort.includes('{') ? desort.replace(/.*\{(.*)\}.*/gi, '$1') : null,
 year: desort.replace(/.*\[(.*)\].*/gi, '$1')
 }
 };
 
 // Add to processing queue
 queue.push(task, (err) => {
 if (!processedFiles.has(task.file)) {
 processedFiles.add(task.file);
 if (err) {
 csvStream.write(`${task.file},Failed\n`);
 } else {
 csvStream.write(`${task.file},Processed\n`);
 }
 }
 });
 }
});

// Add queue completion handler
queue.drain(() => {
 console.log('All files have been processed');
 console.log(`Success: ${succArray.length} files: ${succArray}`);
 console.log(`Failed: ${failArray.length} files: ${failArray}`);
});

//node C:\Users\User\Documents\Coding\Tools\testMDG.js



And the console is logging :


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

ffmpeg reading: F:\Movies & TV\Movies\testDir\Test Video 4 - The Testening [2020].mp4
Successfully processed: Test Video 1 [2020].mp4
Successfully processed: Test Video 2, A [2020].mp4
Successfully processed: Test Video 4 - The Testening [2020].mp4
All files have been processed
Success: 3 files: Test Video 1 [2020].mp4,Test Video 2, A [2020].mp4,Test Video 4 - The Testening [2020].mp4
Failed: 1 files: Test Video 3 {Test Cut} [2020].mp4



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.