stop() { if (this.command) this.command.kill() }
/* ----- Done -----*/ router.get('/video-info', function (req, res) { ffmpeg.ffprobe('videos/input.mp4', function (err, metadata) { if (err) { console.log("MetaData not Found. " + err); } else { res.send(metadata); } }); });
function screenshots(path,des) { ffmpeg(path) .screenshots({ count:4, filename: "%i.jpg", folder:des }); }
ipcMain.on("videos:added", (event, videos) => { const promises = _.map(videos, video => { return new Promise(resolve => { ffmpeg.ffprobe(video.path, (err, metadata) => { video.duration = metadata.format.duration; video.format = "avi"; resolve(video); }); }); }); Promise.all(promises).then(results => { mainWindow.webContents.send("metadata:complete", results); }); });
//Function gets the metadata (using ffprobe) of a video file passed to it, and then returns the metadata object app.use('/getVideoMetaData',bodyParser.json(), function (request,response,next) { var fileName = request.body.fileName; var filePath = request.body.filePath; ffmpeg.ffprobe(filePath, function(err, metadata) { response.send(metadata); }); });
ffmpeg.ffprobe(temp === true ? filename : `${uploadDirectory}/${folder}/${filename}`, (err, metadata) => { if (err) { return reject(err) } return resolve(metadata); });
// Used to concatinate audio files with ffmpeg and retunrs the path to the concatinated file function concatAudioFiles(filePaths, cb) { if (filePaths.length == 1) { cb(null, filePaths[0]); } else { var ffmpegCmd = ffmpeg(); const singleFilePath = path.join(workingDir, 'article.mp3'); filePaths.forEach((x) => { ffmpegCmd.input(x); }); ffmpegCmd .setFfmpegPath(ffmpegStatic.path) .setFfprobePath(ffprobeStatic.path) .on('error', (err) => { cb(err, null); }) .on('end', () => { cb(null, singleFilePath); }) .mergeToFile(singleFilePath, workingDir); } }
play(unknown) { this.dispatchStream = new DispatchStream(this.connection) this.dispatchStream.once('finish', () => { this.emit('end') }) this.command = ffmpeg(unknown) .output(this.dispatchStream) .audioFrequency(48000) .audioChannels(1) .format('s16le') .on('error', (e) => { this.emit('error', e) }) this.command.run() }
ipcMain.on("conversion:start", (event, videos) => { _.each(videos, video => { const outputDirectory = video.path.split(video.name)[0]; const outputName = video.name.split(".")[0]; const outputPath = `${outputDirectory}${outputName}.${video.format}`; ffmpeg(video.path) .output(outputPath) .on("progress", ({ timemark }) => mainWindow.webContents.send("conversion:progress", { video, timemark }) ) .on("end", () => mainWindow.webContents.send("conversion:end", { video, outputPath }) ) .run(); }); });
function screenshots(path, des) { Setting.find() .exec(function (err, setting) { if (err) { console.log(err); } ffmpeg(path) .screenshots({ count: setting[0].screenshots, filename: "%i.jpg", folder: des }) .on('end', function () { thumbnails(des,path); }); }); }
function createSong(path, title, stream, bitrate) { let self = this; let x = new ffmpeg(stream) .audioBitrate(bitrate) .saveToFile(path + title + '.mp3') .on('error', (err) => self.emit('error', err)) .on('end', function() { numVideos--; self.emit('conversion', title); if (!numVideos) { self.emit('finished'); return; } }) }
/* Done */ router.get('/effect-fadeout', function (req, res) { ffmpeg('videos/input.mp4') .audioCodec('libmp3lame') // Audio Codec .videoCodec('libx264') .videoFilters('fade=out:70:10') .output('videos/fadeout.mp4') .on('end', function (err) { if (!err) res.send("Successfull"); }) .on('error', function (err) { console.log('error: ' + err); }).run(); });
ffmpeg(`${uploadDirectory}/file/${file.filename}`) .on('end', () => { return resolve(); }) .on('error', function(err, stdout, stderr) { return reject(err); }) .screenshots({ timestamps: [(frames === 'N/A' ? 0 : '1%')],//1% should remedy black first frames or fade-ins count: 1, filename: `thumb-${file.hash}${file.thumbextension}`, folder: `${uploadDirectory}/file/`, size: geometry.width > geometry.height ? `${thumbSize}x?` : `?x${thumbSize}` //keep aspect ratio, but also making sure taller/wider thumbs dont exceed thumbSize in either dimension });
ffmpeg('./input/trailer.mp4') // setup event handlers .on('filenames', function(filenames) { console.log('screenshots are ' + filenames.join(', ')); }) .on('end', function() { console.log('screenshots were saved'); }) .on('error', function(err) { console.log('an error happened: ' + err.message); }) // take 2 screenshots at predefined timemarks and size .takeScreenshots({ count: 2, timemarks: [ '00:00:02.000', '6' ], size: '150x100' }, './output/')