Articles of fluent ffmpeg

无法使用fluent-ffmpeg转换文件

我用npm install fluent-ffmpeg并validation了它在node-modules中的存在。 如果将其包含在服务器中,则不会出现错误var ffmpeg = require('fluent-ffmpeg'); 但是,当我用它来转换目录中的.gif文件到.mp4它会引发错误: Error: Cannot find ffmpeg 我的代码: var express = require('express'); var bodyParser = require('body-parser'); var app = express(); var ffmpeg = require('fluent-ffmpeg'); var proc = new ffmpeg({ source: '/uploads/myfile.gif' }) .usingPreset('podcast') .saveToFile('/uploads/mynewfile.mp4', function(stdout, stderr) { console.log('file has been converted succesfully'); }); 我究竟做错了什么? 我想将.gif转换为.mp4

用fluent-ffmpeg添加字幕

我试图把字幕烧成一个video。 这个命令完全可以从命令行运行: ffmpeg -i in.mp4 -vf subtitles=sub.srt:force_style='Fontsize=20' out.mp4 我在服务器端的代码似乎没有太多(虽然创buildtest.mp4) ffmpeg('temp/subtitleVideos/qTWVbM5pkKms_pJbE8OAvH3N.mp4') .outputOptions( '-vf subtitles=temp/subtitleVideos/qTWVbM5pkKms_pJbE8OAvH3N.srt' ) .on('error', function(err) { console.log('Error: ' + err.message); }) .save(path + 'test.mp4'); 我得到以下错误: Error: ffmpeg exited with code 1: Error opening filters!

如何使用getSignedUrl()将Node.js fluent-ffmpeg屏幕截图的目标文件夹设置为您的AWS S3存储桶?

我正在编写一个程序,在我的Amazon S3存储桶中为一组.mp4video生成.png缩略图(在同一个文件夹中具有相同的名称)。 在这个例子中,我将为bucket中的/folder/file.mp4创build一个/folder/file.png。 我设法使用s3对象和getSignedUrl来设置源URL,如下所示: var srcurl = s3.getSignedUrl('getObject', { Bucket: 'bucket-name', Key: '/folder/file.mp4' }); 和 new ffmpeg({ source: srcurl }) .screenshots({ count: 1, filename: '%f'.substr(0, '%f'.indexOf('.')) + '.png', /* To shorten the long string that's returned */ folder: desturl, size: MAX_WIDTH + 'x' + MAX_HEIGHT }); 目标url必须与来源相同的文件夹。 所以我把它设置如下: var desturl = s3.getSignedUrl('putObject', { Bucket: 'bucket-name', […]

stream利的ffmpeg大小输出选项不起作用

总结:我试图限制输出为3mb, .outputOptions('-fs 3000000')对我不起作用,文件返回的大小为119260428或119mb。 这里是自己尝试的代码,你所需要的只是一个test.mp3足够大,结果testoutput.ogg大于3mb: var ffmpeg = require("fluent-ffmpeg"); var command = ffmpeg(); var convertToOGG = function(){ var fileName = 'test.mp3' ffmpeg.ffprobe(fileName, function(err, metadata) { command .input(fileName) .inputFormat("mp3") .audioChannels(1) .outputOptions('-fs', 3000000) .output('testoutput.ogg') .on("progress", function(progress) { console.log("Processing: " + progress.timemark); }) .on("error", function(err, stdout, stderr) { console.log("Cannot process video: " + err.message); }) .on("end", function(stdout, stderr) { […]

来自input文件数组的fluent-ffmpeg

我想使用fluent-ffmpeg来创build一个目录的最后n个图像或数据库条目的video。 哪个是正确的语法? 这些是我的尝试: 模仿shell命令 ffmpeg() .addInput('ls *png | tail -n 17') .inputOptions("-pattern_type glob") .output("output.mp4").run() 但不接受shell命令; 空间分离的path ffmpeg() .addInput('a*.png b*.png ') .inputOptions("-pattern_type glob") .output("output.mp4").run() 但不接受空格分隔的文件列表; 图像patharrays ffmpeg() .addInput(array) // ['aa.png', 'a1.png',,,'bbb.png'] .inputOptions("-pattern_type glob") .output("output.mp4").run() 但它不接受数组。 编辑: 此外,从合并多个video使用节点stream利ffmpeg ,我可以添加多个input使用文件数组 var ffmpeg= require('fluent-ffmpeg'); var f=ffmpeg() pngarr.forEach(p => f.input(p)) /// pngarr is my array of png paths 但是运行 f.output("./output.mp4").run() […]

你如何使用Node.jsstream式传输MP4文件与ffmpeg?

我一直在努力解决这个问题好几天了,真的很感谢这个话题。 我能够使用fluent-ffmpeg成功传输存储在Node.js服务器上的mp4audio文件,方法是将文件的位置作为string传递,并将其转码为mp3。 如果我从同一个文件创build一个文件stream,并将其传递给fluent-ffmpeg,它可以用于mp3input文件,而不是mp4文件。 在mp4文件的情况下,没有错误抛出,并声称stream成功完成,但没有什么在浏览器中播放。 我猜这是与存储在mp4文件末尾的元数据有关,但我不知道如何编码。 这是完全相同的文件,当它的位置被传递给ffmpeg,而不是stream。 当我尝试传递一个stream到S3上的mp4文件时,再次没有错误,但没有stream到浏览器。 这并不奇怪,因为ffmpeg不能在本地作为stream来处理文件,所以期待它从s3处理stream是一厢情愿的想法。 我怎样才能streams3 mp4文件,而不是作为一个文件本地存储在本地? 如何获得ffmpeg来做到这一点,而不是转码文件呢? 以下是我目前无法使用的代码。 请注意,它试图将s3文件作为stream传递给ffmpeg,并将其转码为一个mp3,我不想这样做。 .get(function(req,res) { aws.s3(s3Bucket).getFile(s3Path, function (err, result) { if (err) { return next(err); } var proc = new ffmpeg(result) .withAudioCodec('libmp3lame') .format('mp3') .on('error', function (err, stdout, stderr) { console.log('an error happened: ' + err.message); console.log('ffmpeg stdout: ' + stdout); console.log('ffmpeg stderr: ' + stderr); […]