我有一个非常大的视频,比如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(); 但是我不知道如何在制作新作品时触发代码。
答案 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');