import type { EncodingProfile } from "@/ff/mpeg/newoptions.js";
const qsvHwaccel = [
["-init_hw_device", "vaapi=intel:/dev/dri/renderD128"],
["-init_hw_device", "qsv=hw@intel"],
["-filter_hw_device", "hw"],
["-hwaccel", "qsv"],
["-hwaccel_output_format", "qsv"],
];
const rateControlOpt = [
["-extbrc", "1"],
["-look_ahead_depth", "60"],
["-rdo", "1"],
["-mbbrc", "1"],
["-adaptive_i", "1"],
["-adaptive_b", "1"],
];
const baseOpus = [
["-c:a", "libopus"],
["-vbr", "on"],
["-ac", "1"],
];
const qsvHevc = [
["-c:v", "hevc_qsv"],
["-preset", "veryslow"],
["-profile:v", "main"],
];
export const defaultProfiles: EncodingProfile[] = [
{
id: "static",
name: {
en: "Educational / Static",
fa: "",
},
description: {
en: "Perfect for coding tutorials, screen recordings, or slideshows with minimal movement. Drops the frame rate to 1 FPS to drastically slash file size, keeping audio clear enough to follow along.",
fa: "",
},
tier: 1,
outputType: "video",
builder: ({ inputPath, outputPath }) => [
qsvHwaccel,
["-i", inputPath],
qsvHevc,
["-global_quality:v", "35"],
rateControlOpt,
["-r", "1"],
baseOpus,
["-application", "voip"],
["-b:a", "32k"],
["-f", "mp4"],
outputPath,
],
},
{
id: "extreme",
name: {
en: "Extreme Survival",
fa: "",
},
description: {
en: "Maximum compression for critical network conditions. Drops video and audio quality to the absolute bare minimum functional level. Use only when the internet is heavily restricted and nothing else loads.",
fa: "",
},
tier: 1,
outputType: "video",
builder: ({ inputPath, outputPath }) => [
qsvHwaccel,
["-i", inputPath],
qsvHevc,
["-global_quality:v", "48"],
rateControlOpt,
["-r", "1"],
baseOpus,
["-application", "voip"],
["-b:a", "12k"],
["-f", "mp4"],
outputPath,
],
},
];
export function isDefaultProfile(profileId: string): boolean {
return defaultProfiles.some((p) => p.id === profileId);
}این مهم ترین قسمت سورس کد کمپرسی هستش، دقت کنید که این فقط با درایور های intel کار می کنه ( qsv )
خیلی بدرد کسی که تکنیکال نیست نمیخوره این
ولی یه توضیحه که چطوری کامپرس میشه محتوا در اون لولی که الان داره کامپرس میشه (۹۵٪ کاهش حجم )
خیلی بدرد کسی که تکنیکال نیست نمیخوره این
ولی یه توضیحه که چطوری کامپرس میشه محتوا در اون لولی که الان داره کامپرس میشه (۹۵٪ کاهش حجم )
❤1
یه توضیحات بیسیکی هم بخوام بدم راجع بهش ایناست :
با qsv کار می کنه که یه شتابدهنده سخت افزاریه برای انکد / دیکد کردن ویدیو که توی کارت گرافیک های اینتل ( چه integrated ، چه dedicated ) هست.
یکی از مهم ترین عوامل فشرده سازی اینه که فریم ریت رو میاریم روی 1fps، و از کدک hevc ( همون x265 ) استفاده می کنیم که یه کدکه با نسبت فشرده سازی خوب که توی ۲۰۲۶ تقریبا همه جا ساپورت میشه (کدک av1 هم هست ولی ساپورتش خیلی محدود تره و خیلی جدید تره و بهتر )
ریت کنترل هم quality based هست ( مثل crf توی cpu انکدر ها ) ، به زبان ساده تر انکدر خودش بیتریت رو انتخاب می کنه و هر لحظه از ویدیو میتونه بیتریت متفاوتی داشته باشه ، با این کار به فریم هایی که نیاز بیشتری به فضا دارن، فضای بیشتری داده میشه و در کل کیفیت میاد بالا ،
تنظیم میزان کیفیتم بر اساسه یه global quality هستش ، توی پروفایل extreme ، این عدد روی ۴۸ هستش
از بازه ی 0 تا ۵۲ فکر می کنم قابل تنظیمه و 0 بالاترین کیفیتو میده ،
پروفایل بقا ، روی ۴۸ تنظیم شده که یعنی کیفیت رو خیلی میاره پایین و حجمم خیلی میاره پایین
پروفایل استاتیک هم روی 35 هستش
بخش بعدی قسمت صداست ، صدا ها رو با opus انکد می کنیم که بهترین کدکیه که جا های مختلف ( بخصوص تلگرام ) هم ساپورت میشه
روی بیت ریت های خیلی پایین ( حتی زیر ۱۰ کیلوبیت ) صدای آدم قابل فهمه
پروفایل extreme بیت ریت صداش روی 12kb هستش و پروفایل static روی 32kb
وقت نسبتا زیادی گذاشتم روی تیون کردن پارامتر ها که خروجی به کیفیت و حجم الان برسه
با qsv کار می کنه که یه شتابدهنده سخت افزاریه برای انکد / دیکد کردن ویدیو که توی کارت گرافیک های اینتل ( چه integrated ، چه dedicated ) هست.
یکی از مهم ترین عوامل فشرده سازی اینه که فریم ریت رو میاریم روی 1fps، و از کدک hevc ( همون x265 ) استفاده می کنیم که یه کدکه با نسبت فشرده سازی خوب که توی ۲۰۲۶ تقریبا همه جا ساپورت میشه (کدک av1 هم هست ولی ساپورتش خیلی محدود تره و خیلی جدید تره و بهتر )
ریت کنترل هم quality based هست ( مثل crf توی cpu انکدر ها ) ، به زبان ساده تر انکدر خودش بیتریت رو انتخاب می کنه و هر لحظه از ویدیو میتونه بیتریت متفاوتی داشته باشه ، با این کار به فریم هایی که نیاز بیشتری به فضا دارن، فضای بیشتری داده میشه و در کل کیفیت میاد بالا ،
تنظیم میزان کیفیتم بر اساسه یه global quality هستش ، توی پروفایل extreme ، این عدد روی ۴۸ هستش
از بازه ی 0 تا ۵۲ فکر می کنم قابل تنظیمه و 0 بالاترین کیفیتو میده ،
پروفایل بقا ، روی ۴۸ تنظیم شده که یعنی کیفیت رو خیلی میاره پایین و حجمم خیلی میاره پایین
پروفایل استاتیک هم روی 35 هستش
بخش بعدی قسمت صداست ، صدا ها رو با opus انکد می کنیم که بهترین کدکیه که جا های مختلف ( بخصوص تلگرام ) هم ساپورت میشه
روی بیت ریت های خیلی پایین ( حتی زیر ۱۰ کیلوبیت ) صدای آدم قابل فهمه
پروفایل extreme بیت ریت صداش روی 12kb هستش و پروفایل static روی 32kb
وقت نسبتا زیادی گذاشتم روی تیون کردن پارامتر ها که خروجی به کیفیت و حجم الان برسه
❤4👍4
اینم کد پروفایل های جدید ( شامل پروفایل های صوتی و تصویری )
کسی بخواد احتمالا با AI و ده دقیقه زمان بتونه با این کدا یه ربات مشابه سر هم کنه
کسی بخواد احتمالا با AI و ده دقیقه زمان بتونه با این کدا یه ربات مشابه سر هم کنه