Node.js 从视频中剪切多个部分并将它们合并在一起
我试图从视频中剪切出特定的部分,然后使用nodejs和ffmpeg将所有这些部分合并到一个视频文件中 这是我的代码,目前我只能从Node.js 从视频中剪切多个部分并将它们合并在一起,node.js,video,ffmpeg,Node.js,Video,Ffmpeg,我试图从视频中剪切出特定的部分,然后使用nodejs和ffmpeg将所有这些部分合并到一个视频文件中 这是我的代码,目前我只能从.setStartTime到.setDuration的视频中剪切一部分,该部分正在保存 var ffmpeg = require('fluent-ffmpeg'); var command = ffmpeg() .input('./videos/placeholder-video.mp4') .setStartTime('00:00:03') .setDu
.setStartTime
到.setDuration
的视频中剪切一部分,该部分正在保存
var ffmpeg = require('fluent-ffmpeg');
var command = ffmpeg()
.input('./videos/placeholder-video.mp4')
.setStartTime('00:00:03')
.setDuration('02')
.output('./videos/test.mp4')
.on('start', function(commandLine) {
console.log('Started: ' + commandLine);
})
.on('end', function(err) {
if(!err)
{
console.log('conversion Done');
}
})
.on('error', function(err){
console.log('error: ', +err);
}).run();
如何从视频中剪切多个部分并将它们合并到一个视频文件中。我知道.mergeToFile
方法,但在从视频中剪切不同部分后如何使用它
我试着使用.setStartTime
和.setDuration
两次,如下所示,但第一次被忽略
.input('./videos/placeholder-video.mp4')
.setStartTime('00:00:03')
.setDuration('02')
.setStartTime('00:00:15')
.setDuration('05')
.output('./videos/test.mp4')
请阅读更新 尚未测试,但请尝试以下操作: 将输入视频设置两次,如下所示:
.input('./videos/placeholder-video.mp4')
.setStartTime('00:00:03')
.setDuration('02')
.input('./videos/placeholder-video.mp4')
.setStartTime('00:00:15')
.setDuration('05')
var command1 = ffmpeg()
.input('./small.mp4')
.seekInput('00:00:02')
.withDuration(1)
.output('./temp1.mp4')
.run();
var command2 = ffmpeg()
.input('./small.mp4')
.seekInput('00:00:01')
.withDuration(3)
.output('./temp2.mp4')
.run();
var command2 = ffmpeg()
.input('./temp1.mp4')
.input('./temp2.mp4')
.mergeToFile('./merge.mp4', './temp');
然后,您可以使用.mergeToFile
合并多个输入
更新 由于
.setDuration
的限制,我的答案无法使用。它是一个输出选项,因此它定义了对输出文件进行代码转换的时间:
它不用于定义输入的长度/持续时间
另一个选项是.loop
,但显然不支持此选项:
如果你真的想使用nodejs,你需要多个命令
- 将输入视频剪切为临时文件,每次剪切一个
- 将临时文件合并到一个输出文件中
.input('./videos/placeholder-video.mp4')
.setStartTime('00:00:03')
.setDuration('02')
.input('./videos/placeholder-video.mp4')
.setStartTime('00:00:15')
.setDuration('05')
var command1 = ffmpeg()
.input('./small.mp4')
.seekInput('00:00:02')
.withDuration(1)
.output('./temp1.mp4')
.run();
var command2 = ffmpeg()
.input('./small.mp4')
.seekInput('00:00:01')
.withDuration(3)
.output('./temp2.mp4')
.run();
var command2 = ffmpeg()
.input('./temp1.mp4')
.input('./temp2.mp4')
.mergeToFile('./merge.mp4', './temp');
大问题:如果没有临时文件,您的nodejs脚本将无法启动。
因此,使用bash或批处理脚本将更容易。谢谢。在给出了两次
.output
和.input
之后,我现在得到了两个文件,但它们没有按预期进行编辑test1.mp4
应该是3秒,但它应该是6秒test2.mp4
和test2.mp4
比原始视频小2秒。你是对的,我的答案不起作用,即使使用正确;)我的想法是使用.input
两次,但不使用output。只使用.mergeToFile
,即使不使用。运行。但正如我所说,它不起作用是因为.setDuration
,它是一个输出选项,而不是输入()。ffmpeg不知道您需要的.loop
选项,或者该选项很难使用,或者需要重新编码()。我的建议:编写一个bash脚本并调用ffmpeg 3次:将视频剪切2次到所需的长度,然后将其合并到临时文件中。没错,我的节点应用程序崩溃,因为它在脚本运行时找不到这2个临时文件,但是,当我将第三个命令放入setTimeout
并等待生成这些临时文件时,它就会工作并合并它们。而且我也不知道如何编写bash脚本,我的要求实际上是从视频中剪切部分,然后通过浏览器中的web应用程序将它们合并。那么我的bash脚本将如何工作呢。无论如何,非常感谢您的回答。很高兴您现在有了一个有效的解决方案