Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 从视频中剪切多个部分并将它们合并在一起_Node.js_Video_Ffmpeg - Fatal编程技术网

Node.js 从视频中剪切多个部分并将它们合并在一起

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

我试图从视频中剪切出特定的部分,然后使用nodejs和ffmpeg将所有这些部分合并到一个视频文件中

这是我的代码,目前我只能从
.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脚本将如何工作呢。无论如何,非常感谢您的回答。很高兴您现在有了一个有效的解决方案