使用 ffmpeg 和 nodejs (fluent-ffmpeg) 在不重新编码的情况下剪切视频
Cutting a video without re encoding using ffmpeg and nodejs (fluent-ffmpeg)
我有一个简短的问题,
我正在尝试做一个云视频编辑器,我希望能够使用 nodejs 剪切视频。
我正在使用 fluent-ffmpeg。这是我的代码:
const cutVideo = async (sourcePath, outputPath, startTime, duration) => {
console.log('start cut video');
await new Promise((resolve, reject) => {
ffmpeg(sourcePath)
.setFfmpegPath(pathToFfmpeg)
.setFfprobePath(ffprobe.path)
.output(outputPath)
.setStartTime(startTime)
.setDuration(duration)
.on('end', function (err) {
if (!err) {
console.log('conversion Done');
resolve();
}
})
.on('error', function (err) {
console.log('error: ', err);
reject(err);
})
.run();
});
};
它工作正常但不是最佳的,一旦我尝试编辑一个长视频(从视频中获取 10 分钟而不是 1 分钟),它就会超长。
据我了解,ffmpeg 会重新编码所有内容,这就是为什么编辑时间越长,处理时间就越长的原因。
有没有办法在不重新编码所有内容的情况下使用 node-fluent-ffmpeg 进行剪切?
感谢社区!
在深入了解 node fluent 文档和来自@szatmary 的信息后,可以定义音频和视频编解码器。要使用相同的编解码器并避免重新编码所有视频,只需将 copy
作为参数传递给 withVideoCodec
和 withAudioCodec
:
const ffmpeg = require('fluent-ffmpeg');
const pathToFfmpeg = require('ffmpeg-static');
const ffprobe = require('ffprobe-static');
const cutVideo = async (sourcePath, outputPath, startTime, duration) => {
console.log('start cut video');
await new Promise((resolve, reject) => {
ffmpeg(sourcePath)
.setFfmpegPath(pathToFfmpeg)
.setFfprobePath(ffprobe.path)
.output(outputPath)
.setStartTime(startTime)
.setDuration(duration)
.withVideoCodec('copy')
.withAudioCodec('copy')
.on('end', function (err) {
if (!err) {
console.log('conversion Done');
resolve();
}
})
.on('error', function (err) {
console.log('error: ', err);
reject(err);
})
.run();
});
};
我有一个简短的问题, 我正在尝试做一个云视频编辑器,我希望能够使用 nodejs 剪切视频。
我正在使用 fluent-ffmpeg。这是我的代码:
const cutVideo = async (sourcePath, outputPath, startTime, duration) => {
console.log('start cut video');
await new Promise((resolve, reject) => {
ffmpeg(sourcePath)
.setFfmpegPath(pathToFfmpeg)
.setFfprobePath(ffprobe.path)
.output(outputPath)
.setStartTime(startTime)
.setDuration(duration)
.on('end', function (err) {
if (!err) {
console.log('conversion Done');
resolve();
}
})
.on('error', function (err) {
console.log('error: ', err);
reject(err);
})
.run();
});
};
它工作正常但不是最佳的,一旦我尝试编辑一个长视频(从视频中获取 10 分钟而不是 1 分钟),它就会超长。
据我了解,ffmpeg 会重新编码所有内容,这就是为什么编辑时间越长,处理时间就越长的原因。 有没有办法在不重新编码所有内容的情况下使用 node-fluent-ffmpeg 进行剪切?
感谢社区!
在深入了解 node fluent 文档和来自@szatmary 的信息后,可以定义音频和视频编解码器。要使用相同的编解码器并避免重新编码所有视频,只需将 copy
作为参数传递给 withVideoCodec
和 withAudioCodec
:
const ffmpeg = require('fluent-ffmpeg');
const pathToFfmpeg = require('ffmpeg-static');
const ffprobe = require('ffprobe-static');
const cutVideo = async (sourcePath, outputPath, startTime, duration) => {
console.log('start cut video');
await new Promise((resolve, reject) => {
ffmpeg(sourcePath)
.setFfmpegPath(pathToFfmpeg)
.setFfprobePath(ffprobe.path)
.output(outputPath)
.setStartTime(startTime)
.setDuration(duration)
.withVideoCodec('copy')
.withAudioCodec('copy')
.on('end', function (err) {
if (!err) {
console.log('conversion Done');
resolve();
}
})
.on('error', function (err) {
console.log('error: ', err);
reject(err);
})
.run();
});
};