كود:
-vf zscale=t=linear:npl=150,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p
راح نستخدم فلتر zscale الي هو مأخوذ من مكتبةـ z ـ [https://github.com/sekrit-twc/zimg] وهذي المكتبة صممت خصيصا للتحويل في الألوان والعمق
اللوني مع الحفاظ على نسبة العرض والارتفاع [
https://en.wikipedia.org/wiki/Displa...puter_displays ] [Display aspect ratio: 16:9]
راح نقوم بتحويل الفيديو إل نمط لوني أقرب ما يكون إلى RGB\32bit، لماذا قلت "أقرب" لأن التحويل من الأساس لن يعطينا النمط أو القيمة
الحقيقية لألوان RGB\32bit [نقوم بذلك حتى لانفقد بيانات الألوان لذلك نعطي أقصى بت متوفر]، مع الذكر أن colour primaries\الألوان الأولية هي نفسها
لم تتغير لأن النمط الأساسي للون YUV فـ Y يمثل الـ [luminance\الإضائة أو السطوع] و[UV] يمثل [chrominance\الألوان] كل حرف [UV] يمثل لونين من الألوان،
فـ colour primaries يقوم بأخذ الألوان الرئيسية YUV ويقوم بمزجها ليعطينا لون أو طيف لوني آخر. وأيضا وضعنا أمر اللوما\السطوع [npl=150] ودرجة السطوع فتقنية
SDR\TV وغاالبا ماتكون القيمة بين [100 إلى 200]ـ لذلك يمكن تعديل القيمة ويفضل تكون بين 150 إلى 200، بعد ذلك نضع أمر التحويل وهو جعل [الألوان الأولية]
بناطق لوني bt709 والنتيجة p = primaries \ [zscale=p=bt709] ـ وبعد ذلك راح نوصل للفلتر المهم أو عملية مهمة وهي استخدام خوارزمية [tone-mapping]ـ
وقد شرحت ف الفقرة الثانية أهميتها، وهذي العملية فـ أداة FFmpeg لديها 7 أنماط مختلفة للتعامل مع اللون والإضائة بزاوية مختلفة لذلك نستخدم هذا
الأمر [tonemap=tonemap=hable] وقد استخدمت نمط أو خيار [hable] لأنه أعطاني نتجية أفضل ويمكن أن تختار [mobius] وترى النتيجة وتغير الإعدادات.
# جميع الأنماط هنا [
https://ffmpeg.org/ffmpeg-filters.html#tonemap ]
وفي النهاية نحول ألوان transfer matrix إلى BT709 ونخلي البت والفضاء اللوني والاختزال اللوني YUV420 8-bit - وهناك أمر إضافي وهو لإظهار المعلومات ف الميديا انفو للفيديو وماقمنا[اختياري]
به من تحويل نطاق الألوان إلى color_primaries 1 \ color_trc 1 \ colorspace 1 ] - BT 709] وطبعا لا ننسى نختار نوع الإنكودر الذي راح نستخدمه
للانتاج وهــ x264 ـو [c:v = video codec] [c:v libx264 -crf 18 -preset slow-]
هناك أمر لم أذكره وهو [أضيف مؤخرا]
(r = rang (color rang
حددنا هنا النطاق اللوني، عندنا نوعين من النطاق نطاق كامل ونطاق ضيق أو محدود للألوان
full-rang = 0-255 color \ JPEG => RGB >>> =>0-255 color space \ 8bit
limited-rang = 26-235 \ MPEG => yuv=> 16-235 color space \ 8bit
أعتقد أغلب الخامات أنمي أو أفلام تكون ضمن النطاق اللوني المحدود ولذلك وضعنا النطاق اللوني المحدود للألوان tv = television
النتيجة النهائية: [ نلاحظ أننا استدعينا الـ فيديو مباشرة دون الاستعانة بـ avs او vs، لكن هناك طريقة ثانية، اقرأ الفقرة التالية ->]
كود:
ffmpeg.exe -i INPUT.mp4 -vf zscale=t=linear:npl=150,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable,zscale=t=bt709:m=bt709:r=tv,format=yuv420p -color_primaries 1 -color_trc 1 -colorspace 1 -c:v libx264 -crf 18 -preset slow Output_FFmpeg.mkv
في مجلد FFmpeg راح تجد الأداة وسكربتات وملف avs لا ستدعاء وملفـ 2 ـي bat لأني قمت بـعمل ذلك بطريقة استخدام أداة FFmpeg ف الانتاج والفلترة
والتحويل فقط، اسم ملف الباتش [FFmpeg_] حيث استدعينا ملف الفيديو مباشرة، والطريقة أخرى أني استخدمت أداة FFmpeg ف الفلترة والتحويل ثم انتاج
بالانكودر x264 تسمى طريقة البايب(الانبوب)، اسم ملف الباتش [Pip_ffmpeg_x264] وطبعا راح نحتاج سكربت افس لاستدعاء ملف الفيديو، اسم السكربت [Test_ffmpeg]
ملاحظة: تلاحظون أنني استخدمت أمر فك التشفير أو أمر استدعاء الفيديو [LWLibavVideoSource] لأنني أحيانا أو نادرا ما أواجه مشكلة مع فلتر فك تشفير الفيدو -> [FFVideosource]،
المهم ف الفلتر المستخدم حددت الفريمات التي يجب أن تكون، و أحيانا الأفس لايفتح فيديو بعمق لوني 10 لذلك حولت العمق اللوني إلى [YUV420P8]
واستخدمت أمر تريم لأن عملية التصحيح والتحويل بطيئة جدا خاصتا مع avisynth لذلك جربت الأمر فقط على "فريم واحد" [(trim(0,1]
كود:
LWLibavVideoSource("Exodus_UHD_HDR.mp4",fpsnum = 24000, fpsden = 1001, format = "YUV420P8" ).trim(0,1)
[الطريقة الثانية]: _راح نقوم بتصحيح مايجب تصحيحه وتغييره بأداة +Avisynth
تحميل الاداة من هنا : https://www.videohelp.com/software/AviSynth-Plus
والفلاتر بما فيها الملفات الموجودة في مجلد "Avisynth Filters" ضعها في مجلد "+Pluging" ـ
حسنا، راح نقوم بفعل الامر ذاته مع ماقمنا بفعله عند استخدام FFmpeg لذلك لن أشرح أي شيء لأن الأمر مجرد تكرار
راح نضع الامر التالي [انظر في مجلد x264_32_Avs]
كود:
z_ConvertFormat(pixel_type="RGBPS",colorspace_op="2020ncl:st2084:2020:l=>rgb:linear:2020:l", dither_type="none")
DGHable()
z_ConvertFormat(pixel_type="YV12",colorspace_op="rgb:linear:2020:l=>709:709:709:l",dither_type="ordered")
z_Spline64Resize(1280,720)
أهم شي هو أننا أولا نحول الفيديو إلى النمط اللوني RBG بمعدل بت ديبث 32 فـ [Pixel type = "RGBPS" -> 32 Bit depth ] لكن نطاق اللون سيبقى كما
هو [2020]، بعد ذلك راح نستخدم فلتر تعديل اللون والإضائة، مع الذكر أن هناك فقط فلترين أو خيارين متوفر في أفيسينث، لكن فـ FFmpeg متوفر فيها
7 أنماط كما ذكرت سابقا، لكن في avisynth ـ حاليا متوفر Hable و Reinhard فقط من أنماط عملية الـ tonemap، وأنا استخدمت Hable لأني أجده
هنا أفضل (في إعداداته الافتراضية)، المهم بعد ذلك نرجع ونحول إلى النمط اللوني YUV12 وبفضاء لوني RC709
بعد ذلك قررت أصغر الأبعاد، وهناك سبع دوال متوفرة ف فلتر avsresize لتصغير الأبعاد انظر ملف README.md، و الأمر الأخير راح نفعـّل فلتر MT المخصص
لتسريع الانتاج ونضع الأمر prefetch المرتبط بنواة الجهاز، ويتمثل قيمة الفلتر بـ عدد الثريدات التي ستستخدمها أو المتاح لدينا ف نظام الحاسب، أنا
وضعت أربعه، وفي حال وضعت قيمة صفر راح يستخدم كل ما أمكن من قوة نظامك ف الانتاج، هناك ملفين للانتاج [باتش]، يعني طريقتين مختلفين
ف استدعاء سكربت افس والانتاج، طريقة [01] وهناك طريقة [02]، لك الخيار.
Reinhard VS Hable
[الطريقة الثالثة]: عن طريق برنامج VS الثوري!
ونفعل كما فعلنا ف الطريقة الأولى والثانية لذلك لن أعيد الشرح كل ما في الأمر أن الطريقة تختلف
طبعا حاليا نوجد ثلاث انماط متوفرة لـ VS في عملية الـ tonemap هي [Hable + Reinhard + tmap.tm => hable] الفلتر أو النمط الثالث
لم أذكره لأني أجده سيء ف إعداداته، على كل نلاحظ أن سكربت tmap.tm هو نفسه hable بس يعطي نتيجة مختلفة بسبب الإعدادات وطريقة العمل،
المهم في نهاية السكربت جعلت الإعدادات HD\YUV420\8bit. وللتذكير لازم تثبت سكربت tmap حتى يمكنك استخدام أمر tmap.tm
النمط الثالث + للاستزادة https://github.com/ifb/vapoursynth-tonemap [
لازم تقوم بتحميل و تثبت هذا الفلتر]
حسنا، السكربت الأساسي كما هو فـ الأسفل [بدون عملية أو فلتر tonemap]، وراح نظيف عليه أحد الانماط ولك الخيار،
إما [Hable أو Reinhard أو نستخدم سكربت آخر مبني على نمط Hable لكن يعطي نتيجة مختلفة]
كود:
src = core.lsmas.LWLibavSource(source='Exodus_UHD_HDR.mp4', fpsnum = 24000, fpsden = 1001,format="yuv420p8").std.Trim(0,10)
src =core.resize.Bicubic(clip=src, format=vs.RGBS,filter_param_a=0.0,filter_param_b=0.75, range_in_s="limited", matrix_in_s="2020ncl", primaries_in_s="2020", primaries_s="2020", transfer_in_s="st2084", transfer_s="linear",dither_type="none", nominal_luminance=1000)
src =core.resize.Bicubic(src,1280,720, format=vs.YUV420P8, filter_param_a=0.0, filter_param_b=0.75, matrix_s="709", primaries_in_s="2020", primaries_s="709", transfer_in_s="linear", transfer_s="709",dither_type="ordered")
src.set_output()
أحد هذه الأوامر أو الطرق الثلاثة راح نضعها بعد السطر الثاني من السكربت الذي ف الأعلى
[Hable.vpy]
كود:
src = core.tonemap.Hable(src,exposure=5.5,w=5)
[Reinhard.vpy]
كود:
src = core.tonemap.Reinhard(src,exposure=1.6 , contrast=0.5, peak=1)
[tmap.tm.vpy]
كود:
src =tmap.tm(src,source_peak=1000,desat=50,show_satmask=False,lin=True,show_clipped=False)
السكربتات الثلاثة موجودة فـ مجلد VS بهيئتها الكاملة، وبهذا أكون قد انتهيت من شرح وذكر الطرق الثلاثة.
1- ابحث عن أفضل طريقة والأسهل لك، وليس مايعجبك من الطرق التي ذكرتها، ولازم تتأكد أنك استخدمت عملية tonemap لم تحدث أمر غير طبيعي
ف الجودة أو الألوان، لا نريد نتيجة تكون فيها الألوان محروقة او داكنة او ساطعة جدا.
2- هذه الطرق أستطيع أن أقول أنها غير مستقرة وليست نهائية، لأن هذي الطرق حديثة صارلها سنتين ونصف تقريبا، كون خامات [4 ,8 ك]
المبنية على تقنية HDR10ـ بدأت تظهر بشكل أكثر منذ بداية عام 2017 أو قبل .
3- كوني مستخدم برنامح VS أجده أسرع بكثير عند الانتاج مقارنة بـ Avisynth بنسبة 40% وقد تزيد لدى البعص، لكني لا أخفي أني
أجد النتيجة النهائية بـ أفس أفضل بسبب الإعدادات الافتراضية للفلاتر المستخدمة.
4- هذي الطرق شرحتها خصيصا لخامات (HDR(4K\8K) (10-12bit|BT2020 ـ
5- ستكون النتيجة أفضل بكثير في حال انتجت بعد التعديل بالاختزال اللوني [Chroma subsampling 444PP\10bit]
بدل الاختزال [CS 420PP\10bit]
6- جميع الملفات من سكربتات وفلاتر وانكودرز جاهزة يمكنك تحميلها
من رابط فـ بداية الموضوع [على طبق من ذهب]
7- لا تسألني عن شيء وأنت مبتدأ فـ vs أو avs.
8- لست نقنيا لذلك أحيانا لم استخدم المصطلح التقني الصحيح، إنما حاولت قدر الإمكان تقريب المعنى
9- أتمنى مِن مَن له فكرة أكبر عن بعض الأمور التي تناولتها أن يرشدني في حال ارتكبت خطأ
10- نعم الأخطاء الإملائية كثيرة، لذلك شيئا فشيئا راح أضيف وأعدل إن شاء الله
HDR10
HDR
4K
8K
Avisynth
VS
FFmpeg
RAW
Python
tonemap
RGBPS
BT2020
BT709
RC709
RC2020
X264
RBG32
المفضلات