使用ffmpeg将长视频切成节点js中的小块

时间:2018-01-20 17:16:08

标签: node.js ffmpeg

我有一个非常大的视频,比如3小时,我想把它分成20分钟的小片 这是我的初始代码:

var fs = require('fs'); 
var spawn = require('child_process').spawn;
var ffmpeg = spawn("ffmpeg", [
    '-i', './videos/long-video.mp4',
    '-codec:v', 'copy', 
    '-codec:a', 'copy', 
    '-f','mp4',
    '-map', '0', '-f', 'segment', '-segment_time', '1200', './videos/pieces/video_%04d.mp4'
  ]); 

此代码的作用是将视频分片并将其保存到我提供的位置,因此您需要等到ffmpeg完成切片整个视频。 但我正在寻找的是一种在ffmpeg创建新片段时触发代码的方法,因此我可以在数据库中插入视频名称,如下所示:

var fs = require('fs'); 
var spawn = require('child_process').spawn;
var ffmpeg = spawn("ffmpeg", [
    '-i', './videos/long-video.mp4',
    '-codec:v', 'copy', 
    '-codec:a', 'copy', 
    '-f','mp4',
    '-map', '0', '-f', 'segment', '-segment_time', '1200', 
    'pipe:1'
  ]);
ffmpeg.stdout.on('data', function (data) {
    // store the video name in database
    console.log('new peice has been made' );
  });
ffmpeg.stderr.on('data', function (data) {
    console.log('error' );
  });

ffmpeg.stdout.on 没有退出我只是想表明我正在寻找什么。存在的是 ffmpeg.stdout.pipe(); 但是我不知道如何在制作新作品时触发代码。

1 个答案:

答案 0 :(得分:0)

不确定,但nodejs的另一种可能性是 fluent-ffmpeg https://github.com/fluent-ffmpeg/node-fluent-ffmpeg

在这里,您可以流畅地编写ffmpeg命令,并对事件做出反应:

ffmpeg('/path/to/file.avi')
  .videoCodec('libx264')
  .audioCodec('libmp3lame')
  .size('320x240')
  .on('error', function(err) {
    console.log('An error occurred: ' + err.message);
  })
  .on('end', function() {
    console.log('Processing finished !');
  })
  .save('/path/to/output.mp4');