Есть ли способ во время процесса сжатия ffmpeg определить точный размер файла видео с различными интервалами?
Например, метод получения текущего размера файла во время процесса для использования при сравнении с исходным размером файла видео.
Например, перекодирование потенциального видео занимает 5 минут, но в процессе функция будет проверять размер файла с интервалом в 100 кадров или каждые 5 секунд, чтобы убедиться, что размер файла не превышает исходный. Если это так, он убьет процесс с помощью command.kill('SIGSTOP');
const transcodeVideo = () => {
return new Promise((resolve, reject) => {
ffmpeg("./video.mp4")
.setFfprobePath(pathToFfprobe.path)
.setFfmpegPath(pathToFfmpeg)
.videoCodec("libx264")
.audioCodec("libmp3lame")
.size("720x?")
.on("error", (err) => {
console.info(err);
})
.on("end", () => {
//irrelevant resolving code in here
})
.save("./transVideo.mp4");
});
};
transcodeVideo();
Вы можете использовать свойство targetSize
из "progress"
событие, чтобы получить текущий размер целевого файла:
let command = ffmpeg
// ...
.on("progress", progress => {
if (progress.targetSize > originalSize) {
command.kill();
}
});
Чтобы получить исходный размер, вы можете использовать стандартные функции в библиотеке Node fs
, например. fs.stat
.