From e38718b1fa4ff254df064d09c028a2c1fd7c4f15 Mon Sep 17 00:00:00 2001 From: dakerboul Date: Mon, 10 Mar 2025 17:56:56 +0100 Subject: [PATCH] videoManager.js: add videoManager.js --- src/video/videoManager.js | 56 +++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/src/video/videoManager.js b/src/video/videoManager.js index 2a5f346..2336369 100644 --- a/src/video/videoManager.js +++ b/src/video/videoManager.js @@ -28,9 +28,9 @@ async function deleteVideoProject(videoId) { } async function createVideoWithList(projectId, pathList, duration, videoId) { - const tempFile = path.join('temp.txt'); + const workdir = path.join(PROJECTS_DIR, 'storage', `${projectId}`); + const tempFile = path.join(workdir, 'temp.txt'); try { - const workdir = path.join(PROJECTS_DIR, 'storage', `${projectId}`); const images = pathList; console.log('images:', images); @@ -41,7 +41,7 @@ async function createVideoWithList(projectId, pathList, duration, videoId) { return numA - numB; }); - // Déterminer l'id de la première et la dernière image utilisée + // Déterminer l'id de la première et de la dernière image utilisée const firstImageId = parseInt(path.basename(sortedImages[0]).match(/\d+/)[0], 10); const lastImageId = parseInt(path.basename(sortedImages[sortedImages.length - 1]).match(/\d+/)[0], 10); @@ -66,41 +66,51 @@ async function createVideoWithList(projectId, pathList, duration, videoId) { outputVideo ]; - console.log('Lancement de ffmpeg en arrière-plan avec les arguments:', ffmpegArgs); + console.log('Lancement de ffmpeg avec les arguments:', ffmpegArgs); - // Lancer ffmpeg en mode détaché + // Lancer ffmpeg sans détachement const child = spawn('ffmpeg', ffmpegArgs, { - detached: true, - stdio: 'ignore' + cwd: workdir, + detached: false, + stdio: 'pipe' }); - // Permettre au processus ffmpeg de continuer même si le parent se termine - child.unref(); - console.log('Video creation started in background:', outputVideo); + // Afficher les logs de ffmpeg + child.stdout.on('data', (data) => { + console.log(`ffmpeg stdout: ${data}`); + }); + child.stderr.on('data', (data) => { + console.error(`ffmpeg stderr: ${data}`); + }); - return outputVideo; - } catch (error) { - console.error('Error creating video:', error); - serverError.sendError(error); - } finally { - // Attention : supprimer le fichier temporaire immédiatement pourrait poser problème - // si ffmpeg n'a pas encore fini de le lire. Envisagez un délai ou un mécanisme de nettoyage - if (fs.existsSync(tempFile)) { - fs.unlinkSync(tempFile); - console.log('Temporary file deleted:', tempFile); - } + child.on('close', (code) => { + console.log(`ffmpeg process exited with code ${code}`); + // Vous pouvez ici gérer la suppression du fichier temporaire + if (fs.existsSync(tempFile)) { + fs.unlinkSync(tempFile); + console.log('Temporary file deleted:', tempFile); + } + }); - //changer status de la vidéo à 1 + console.log('Video creation started:', outputVideo); + + // Mettre à jour le statut de la vidéo dans la base de données const query = 'UPDATE public.videos SET status = 1 WHERE id = $1'; db.query(query, [videoId], (err, results) => { if (err) { return serverError.sendError('Error updating video status:', res, err); } - console.log('Video status updated:', results.rows[0]); + console.log('Video status updated:', results.rows ? results.rows[0] : 'Aucune ligne retournée'); }); + + return outputVideo; + } catch (error) { + console.error('Error creating video:', error); + serverError.sendError(error); } } + async function createVideo(projectId) { const tempFile = path.join('temp.txt'); try {