کاهش سایز ویدیو، بدون افت کیفیت با پکیج ند جی اس FFmpeg

در این مقاله میخواهیم با کمتر از 60 خط جاوااسکریپت یک ویدیو کمپرسور بسازیم که بدون کاهش کیفیت حجم ویدیو را کاهش دهد. برای انجام این کار از پکیج ffmpeg وfs  استفاده کردیم. (از قصد لینک نمیدهم تا خودتان سرچ کردن را یاد بگیرید. کافیست در گوگل سرچ کنید ffpmeg npm  تا دایکومنتیشن را بیابید!)

این برنامه کوچک چگونه کار میکند؟

در این برنامه کافیست ادرس دو فولدر که از قبل در روت پروژه ایجاد شده اند را به دو متغیر تعریف شده در خط های بالایی برنامه بدهیم. سپس با شروع برنامه با npm start تمام فایل های داخل ان فولدر شناسایی شده و تک به تک پردازش میشود. با همان نامی که در فولدر مبدا بودند در فولدر مقصد ذخیره میشوند.

البته باید برای پردازش ویدیو صبر کنید. هر چه ویدیو بزرگتر باشد باید بیشتر صبر کنید. سعی کنید ویدیو هایتان 10 مگابایتی باشد و مثلا پس از کمپرس شدن به 6 مگابایت برسد.

ریپوسیتوری گیتهاب

ماژول هایی (پکیج ها) که در این مینی پروژه به کار رفته:

  • ماژول fs (ماژول داخلی) برای خواندن ویدیو ها
  • ماژول ffmpeg (ماژول خارجی) برای پردازش ویدیو (کاستن حجم)

نکته: همانطور که میدانید ماژول های داخلی نیاز به نصب ندارند اما ماژول های خارجی باید نصب شوند.

در حقیقت ffmpeg کمپرسور نیست اما میتواند با متد setVideoFormat فرمت ویدیو را تغییر دهد. اگر فرمت ویدیو ما mp4  باشد و بخواهیم دوباره ان را به فرمت mp4 تبدیل کنیم هم امکان پذیر است با این تفاوت که سایز ان کاهش می یابد. اینجا هدفمان همین بود.

سوال 1: چگونه node.js متوجه میشود که چند تا ویدیو در یک فولدر وجود دارد؟

پاسخ: با متد fs.readdir میتواند نام تمام فایل های داخل یک دایرکتوری (فولدر) را بخواند. (حتی اگر بخواهید به شما هم نمایش میدهد. کافیست از console.log استفاده کنید.)

سوال 2: چگونه تک تک فایل ها پردازش میشوند؟

پاسخ: کافیست یک حلقه مثلا for یا forEach تعریف کنیم. که از ابتدا در جاوااسکریپت یاد گرفتیم. به همین سادگی!