چطور ویدیوهای آپلود شده کاربر را با کیفیتی قابل قبول فشرده کنیم؟
- نفیسه افقی 2 سال قبل سوال کرد
- شما باید برای ارسال دیدگاه وارد شوید
ffmpeg یک کتابخانه عالی برای فشرده سازی ویدیو هاست (برای استفاده از ffmpeg در nestjs ، لینک را ببینید)
اما چه تنظیماتی را باید برای آن تنظیم کنیم تا با کیفیتی قابل قبول، ویدیوها را فشرده کنیم؟
الگوریتم زیر می تواند برای این کار مفید باشد. (الگوریتم کامل تر را در این لینک ببینید)
// Input file path
const inputPath = file.path;
// Output file path
const outputPath = 'compressed/uploads/posts/'+file.filename;
const fs = require('fs');
const outputDir = 'compressed/uploads/posts';
if (!fs.existsSync(outputDir)) {
fs.mkdirSync(outputDir, { recursive: true });
}
const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path;
const ffmpeg = require('fluent-ffmpeg');
ffmpeg.setFfmpegPath(ffmpegPath);
const bitrate = this.whatBitrate(file.size)
const command = ffmpeg(inputPath)
.videoCodec('libx264')
.audioCodec('aac')
.videoBitrate('1000k')
.outputOptions(['-c:v libx264', `-b:v ${bitrate}k`, '-c:a aac', '-b:a 58k'])
.output(outputPath)
.on('end', () => {
console.log('Compression complete!');
//replace compressed one to original one:
var oldPath = "compressed/uploads/posts/"+file.filename;
var newPath = "uploads/posts/"+file.filename;
fs.rename(oldPath, newPath, function (err) {
if (err) throw err
console.log('Successfully renamed - AKA moved!')
})
});
command.run();
*تابع whatBitrate
بر اساس اندازه ویدیو اصلی ، bitrate فایل فشرده شده را تعیین می کند:
whatBitrate (bytes) {
const ONE_MB = 1000000
const BIT = 28 // i found that 28 are good point fell free to change it as you feel right
const diff = Math.floor(bytes / ONE_MB)
if (diff < 5) {
return 128
} else {
return Math.floor(diff * BIT * 1.1)
}
}
- نفیسه افقی 2 سال قبل پاسخ داد
- آخرین ویرایش 2 سال قبل
- شما باید برای ارسال دیدگاه وارد شوید