¿Hay alguna manera durante el proceso de compresión ffmpeg de determinar en varios intervalos el tamaño de archivo exacto en el que se encuentra un video?
Como un método para obtener el tamaño de archivo actual durante el proceso para usar cuando se compara con el tamaño de archivo original de los videos.
Por ejemplo, un video potencial que se transcodifica toma 5 minutos, pero durante el proceso, una función verificará el tamaño del archivo en intervalos de 100 cuadros o cada 5 segundos para asegurarse de que el tamaño del archivo no haya excedido el original. Si es así, eliminará el proceso con 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.log(err); }) .on("end", () => { //irrelevant resolving code in here }) .save("./transVideo.mp4"); }); }; transcodeVideo();Puede usar la propiedad targetSize del evento "progress" para obtener el tamaño actual del archivo de destino:
let command = ffmpeg // ... .on("progress", progress => { if (progress.targetSize > originalSize) { command.kill(); } }); Para obtener el tamaño original, puede usar las funciones estándar en la biblioteca fs de Node, por ejemplo, fs.stat .