پاسخ داده شد
0
0

چطور ویدیوهای آپلود شده کاربر را با کیفیتی قابل قبول فشرده کنیم؟

  • شما باید برای ارسال دیدگاه شوید
پاسخ عالی
0
0

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)
  }
}
  • شما باید برای ارسال دیدگاه شوید
نمایش 1 نتیجه
پاسخ شما
اگر قبلاً حساب کاربری دارید با پر کردن فیلد های زیر یا به عنوان مهمان ارسال کنید.
نام*
ایمیل*
وب سایت