zeinstack
ابزار محلی Node.js

مبدل HLS / DASH

ویدیوهاتون رو با FFmpegِ واقعیِ نصب‌شده روی سیستم خودتون به HLS و DASH تبدیل کنید — همه‌چیز روی localhost می‌مونه، هیچ فایلی جایی آپلود نمی‌شه.

Node.js ۱۸ به بالاExpress + Multerبدون آپلود خارجیحدود ۴۷۰ کیلوبایت
دانلود سورس (zip)

رایگان. بعد از دانلود: npm install && npm start

مفهوم

HLS و DASH یعنی چی؟

HLS (HTTP Live Streaming) و DASH (Dynamic Adaptive Streaming over HTTP) دو استاندارد برای پخش ویدیو با کیفیت تطبیقی‌ان: ویدیو به‌جای یک فایل بزرگ، به قطعه‌های چندثانیه‌ای (segment) در چند کیفیت مختلف بریده می‌شه و یک فایل مانیفست (m3u8 برای HLS، mpd برای DASH) به پخش‌کننده می‌گه هر قطعه کجاست. پخش‌کننده بسته به سرعت اینترنت کاربر، کیفیت مناسب رو خودش انتخاب و حتی وسط پخش عوض می‌کنه.

HLS مال اپل است و روی Safari/iOS به‌صورت native پخش می‌شه (جاهای دیگه با کتابخانه‌ای مثل hls.js)؛ DASH یک استاندارد باز (ISO/IEC) و فرمت‌آگنوستیکه و پایه پخش‌کننده‌هایی مثل YouTube است. این ابزار هر دو رو از روی یک ویدیوی ورودی می‌سازه تا بتونید کنار هم مقایسه‌شون کنید.

امکانات

این ابزار چیکار می‌کند؟

چند ویدیو رو هم‌زمان با درگ‌اند‌دراپ اضافه می‌کنید؛ روی سرور یکی‌یکی (نه موازی) پردازش می‌شن.
خروجی HLS (.m3u8/.ts)، DASH (.mpd/.m4s) یا هر دو — هرکدوم رو بخواید انتخاب می‌کنید.
نردبان کیفیت ABR واقعی تا ۴ رندیشن (1080p/720p/480p/360p)؛ کیفیت‌های بزرگ‌تر از رزولوشن اصلی ویدیو خودکار حذف می‌شن، بدون آپ‌اسکیل.
مدت سگمنت (۲ تا ۱۰ ثانیه) و preset سرعت انکود x264 (ultrafast تا medium) هر دو قابل تنظیم‌ان.
دکمه «مشاهده دمو» یک پخش‌کننده واقعی با hls.js و dash.js باز می‌کند — دقیقاً همان چیزی که یک پخش‌کننده adaptive واقعی می‌بیند.
«باز کردن پوشه» خروجی رو مستقیم توی File Explorer / Finder / فایل‌منیجر سیستم شما باز می‌کند.
خروجی کامل هر ویدیو رو می‌توانید به‌صورت یک فایل ZIP دانلود کنید.
پیشرفت پردازش زنده از خروجی -progress خود FFmpeg خوانده می‌شود؛ پردازش در حال اجرا هم قابل لغو است.
فونت (Vazirmatn) و هر دو پخش‌کننده (hls.js، dash.js) کاملاً محلی‌اند — هیچ اسکریپتی از CDN بارگذاری نمی‌شود.
پیش‌نمایش

رابط کاربری

صف پردازش و تنظیمات خروجی — همانی که بعد از npm start توی مرورگرتان می‌بینید.

صف پردازش و تنظیمات خروجی — همانی که بعد از npm start توی مرورگرتان می‌بینید.

پیش‌نیازها

قبل از اجرا چی لازم دارید

Node.js نسخه ۱۸ یا بالاتر

از nodejs.org نصب کنید. بدون این، حتی npm install هم اجرا نمی‌شود.

FFmpeg

موتور واقعی انکود. اپ اول توی PATH سیستم دنبالش می‌گردد، بعد توی پوشه ffmpeg-bin/ کنار پروژه؛ اگر هیچ‌کدام نبود، بالای صفحه یک پیام راهنما نشان داده می‌شود.

ویندوز

# روش ۱ (ساده‌ترین): از پوشه پروژه اجرا کنید npm run setup-ffmpeg # روش ۲: نصب سیستمی با winget winget install Gyan.FFmpeg # روش ۳: نصب سیستمی با Chocolatey choco install ffmpeg

macOS

# نصب سیستمی با Homebrew (پیشنهادی) brew install ffmpeg

دانلود خودکار برای مک عمداً غیرفعال است: آدرس رسمی evermeet.cx این روزها به دامنه‌ای دیگر ریدایرکت می‌شود که نمی‌شد صحتش را از داخل اسکریپت تضمین کرد. Homebrew مسیر امن و استاندارد است.

لینوکس

# روش ۱: از پوشه پروژه اجرا کنید npm run setup-ffmpeg # روش ۲: پکیج‌منیجر توزیع خودتان sudo apt install ffmpeg # Debian/Ubuntu sudo dnf install ffmpeg # Fedora sudo pacman -S ffmpeg # Arch

دانلود خودکار برای ویندوز/لینوکس از ساخت‌های GPL پروژه BtbN/FFmpeg-Builds روی گیت‌هاب است — همان منبعی که صفحه رسمی دانلود ffmpeg.org هم برای این دو پلتفرم معرفی می‌کند.

اجرا

راه‌اندازی در سه قدم

01

نصب وابستگی‌ها

توی پوشه پروژه دستور npm install را بزنید.

02

اجرای سرور

با npm start سرور بالا می‌آید؛ پورت با متغیر محیطی PORT قابل تغییر است.

03

باز کردن مرورگر

آدرس http://localhost:3000 را باز کنید و ویدیو را بکشید توی صفحه.

ساختار پروژه

داخل سورس چی هست

بعد از دانلود و اکسترکت، ساختار همین است — دقیقاً همین را npm install و npm start اجرا می‌کنند.

hls-dash-creator.zip
server.jsسرور Express: آپلود، صف پردازش، استریم خروجی، باز کردن پوشه
ffmpeg-runner.jsپیدا کردن FFmpeg + ساخت آرگومان‌های HLS/DASH + اجرای پردازش
scripts/
setup-ffmpeg.jsدانلود خودکار FFmpeg برای ویندوز/لینوکس
public/
index.htmlرابط کاربری: درگ‌اند‌دراپ، تنظیمات خروجی، صف
app.jsمنطق فرانت‌اند: صف، آپلود، وضعیت پردازش
fonts/فونت Vazirmatn به‌صورت محلی — بدون بارگذاری از CDN
vendor/پخش‌کننده‌های hls.js و dash.js به‌صورت محلی، برای دکمه «مشاهده دمو»
package.jsonوابستگی‌ها: express، multer، adm-zip
README.mdراهنمای کامل نصب و استفاده
uploads/فایل‌های موقتِ آپلود — در .gitignore
output/خروجی نهایی HLS/DASH — در .gitignore
خروجی

ساختار پوشه خروجی

برای هر ویدیو، این ساختار زیر output/<نام‌ویدیو>/ ساخته می‌شود:

hls/ master.m3u8 (فقط در حالت چندکیفیتی) v0.m3u8, v1.m3u8, ... یا index.m3u8 v0_000.ts, ... یا seg_000.ts, ... dash/ manifest.mpd init-stream0.m4s, chunk-stream0-00001.m4s, ...
نکات فنی

زیر کاپوت

انکودبا libx264 + aac انجام می‌شود؛ فریم‌ریت خروجی روی ۳۰fps ثابت می‌شود تا فاصله کی‌فریم‌ها (GOP) دقیقاً با مدت سگمنت همخوان باشد — پیش‌نیاز سگمنت‌بندی تمیز در HLS/DASH.
صدا در حالت چندکیفیتیHLS برای هر رندیشن صدا را جدا انکود می‌کند (هر رندیشن خودکفاست)، اما DASH فقط یک AdaptationSet صوتی مشترک برای همه رندیشن‌های ویدیویی می‌سازد.
گزارش پیشرفتاز خروجی -progress pipe:1 خود FFmpeg خوانده می‌شود؛ اگر مدت ویدیو در مرورگر قابل‌تشخیص نباشد، نوار پیشرفت ثابت می‌ماند ولی پردازش ادامه پیدا می‌کند.
«باز کردن پوشه»با دستور بومی سیستم‌عامل (explorer در ویندوز، open در macOS، xdg-open در لینوکس) روی همان ماشینی که سرور را اجرا کرده کار می‌کند.

محدودیت‌ها

  • سرور فقط برای استفاده شخصی/محلی طراحی شده — بدون احراز هویت، بدون محدودیت نرخ درخواست. آن را روی اینترنت عمومی expose نکنید.
  • این یک ابزار آموزشی/دمو است، نه یک پایپ‌لاین ترانسکود در مقیاس تولید.

آماده‌اید امتحانش کنید؟

سورس را دانلود کنید، FFmpeg را نصب کنید، و با npm install && npm start در کمتر از یک دقیقه اجرایش کنید.

دانلود سورس (zip)