गलती से इस्तेमाल किया गया Blender VSE
(aras-p.info)- Aras को यह भी नहीं पता था कि Blender में Video Sequence Editor(VSE) है, लेकिन Blender HQ की विज़िट के बाद उन्होंने लगभग दो महीनों तक पार्ट-टाइम Blender 4.1 के लिए performance और quality सुधारों में योगदान दिया
- सबसे स्पष्ट बदलाव timeline responsiveness में है: Sprite Fright project में, जहाँ लगभग 3000 strips दिखते हैं, scroll और panning UI करीब 15fps से बेहतर होकर 60fps से ऊपर हो गया
- ffmpeg-आधारित RGB↔YUV conversion, Audaspace audio resampling, image conversion/filtering, और VSE effects processing में multithreading, SIMD और math simplification लागू किए गए
- तीन Blender Studio datasets पर, लेखक के PC के हिसाब से VSE movie final render time लगभग 2 गुना तेज हुआ, और Sprite Fright rendering लगभग 13 मिनट से घटकर 7 मिनट रह गई
- कुल 37 pull requests review और merge हुए; मौजूदा बदलाव Blender 4.1 में शामिल हैं और आगे का VSE काम Blender 4.2 से जारी रहेगा
Blender VSE में योगदान देने की पृष्ठभूमि
- Aras Unity के Unite 2023 में शामिल होने के लिए Amsterdam गए थे और खाली समय में Blender HQ देखने गए
- वहाँ Francesco और Sergey ने उनसे पूछा कि क्या वे VSE में योगदान देना चाहेंगे, और उसके बाद उन्होंने Blender के Video Sequence Editor को छूना शुरू किया
- video editing, timeline, sequencer, color grading, ffmpeg, और audio mixing की अच्छी जानकारी नहीं थी, फिर भी उन्होंने कम विवादित performance optimization से शुरुआत की
- लगभग दो महीनों के पार्ट-टाइम काम के बाद Blender 4.1 में जाने वाले सुधारों का एक सेट तैयार हुआ
- Blender 4.1 beta हो चुका है, और सामान्य daily builds से डाउनलोड किया जा सकता है
Timeline drawing और UI responsiveness
- VSE timeline स्क्रीन के नीचे वाला क्षेत्र है, और Sprite Fright edit के पूरे project को zoom out करने पर एक साथ लगभग 3000 strips दिखते हैं
- पहले इस timeline में सिर्फ scrolling और panning करने पर भी UI refresh करीब 15fps तक ही रहता था
- बदलावों के बाद यह 60fps से ऊपर चलता है
- संबंधित PR: #115311
- bottleneck यह था कि graphics API draw calls दो triangles की unit में submit किए जा रहे थे, और Superluminal profiler में ज्यादातर समय “एक quad draw शुरू करना” और “एक quad draw खत्म करना” functions में खर्च हो रहा था
- इसी दौरान audio waveform display के अजीब व्यवहार को भी ठीक किया गया और UI को polish किया गया; waveform display अब default रूप से enabled है
- संबंधित issue: #115274
Scope display quality और speed में सुधार
- VSE image histogram, waveform, और vectorscope जैसे सामान्य scope display options देता है
- histogram पहले pixelated image और बहुत strong saturation के साथ draw होता था, लेकिन अब यह ज्यादा smooth polygon, grid, और कम saturation के साथ दिखता है
- संबंधित PR: #116798
- Waveform के parade option में बहुत जल्दी saturate होने की समस्या थी, और multithreading के बाद यह 15 गुना तेज हो गया
- संबंधित PR: #115579
- Vectorscope के outer color hexagon में काफी pixelation था, इसलिए image editor vectorscope के updated design को copy करके लागू किया गया
- संबंधित PR: #117738
- “overexposed areas दिखाने” वाला zebra stripes option भी 2–3 गुना तेज हुआ
- संबंधित PR: #115622
- उन्होंने यह विचार भी जोड़ा कि सभी scopes और image editor scopes को किसी दिन GPU compute shader से process किया जाना चाहिए
ffmpeg RGB↔YUV conversion optimization
- Blender audio और video पढ़ने-लिखने के लिए मुख्य रूप से ffmpeg library का इस्तेमाल करता है
- Blender के अंदर ffmpeg command-line tool नहीं, बल्कि libavcodec जैसी code libraries इस्तेमाल होती हैं, और
libswscalemovie frames के RGB↔YUV conversion को संभालता है libswscalemultithreaded conversion support करता है, लेकिन सिर्फsws_getContext()औरsws_scale()इस्तेमाल करने पर यह पूरी तरह single-threaded चलता है- multithreading इस्तेमाल करने के लिए initialization के समय
"threads"parameter set करना पड़ता है, इसलिएsws_alloc_context(),av_opt_set_int(),sws_init_context()को सीधे इस्तेमाल करना होता है - साथ ही
sws_scale()internally multithreading नहीं करता, इसलिएsws_scale_frame()इस्तेमाल करना पड़ा, और इस प्रक्रिया मेंAVFrameबनाने के तरीके की समस्या भी सामने आई - नतीजतन movie file लिखते समय RGB→YUV conversion काफी तेज हो गया
- संबंधित PR: #116008
- movie file पढ़ते समय भी multithreaded YUV→RGB conversion इस्तेमाल किया गया, और vertical flip को उसी काम में मिला दिया गया
- संबंधित PR: #116309
Audio resampling
- VSE में video render करते समय “video या audio frame बनाने” के समय का लगभग आधा हिस्सा Blender द्वारा इस्तेमाल की जाने वाली audio library Audaspace के अंदर खर्च हो रहा था
- bottleneck audio encoding नहीं, बल्कि encoding से पहले की mixing थी, और इसका ज्यादातर हिस्सा तब resampling में जाता था जब 48kHz movie में 44.1kHz जैसे audio strips मिले होते थे
- Audaspace में दो resampling modes थे
- Blender internal playback: samples के बीच linear interpolation करने वाला Linear resampler
- Movie rendering: Julius O Smith’s algorithm आधारित resampler
- resampler quality की तुलना एक synthetic sound, जिसकी single frequency बढ़ती जाती है, को resample करने के बाद spectrogram देखने के तरीके से की गई
- लक्ष्य Audacity की “best” setting जैसा result था, जिसमें extra frequencies जितनी कम हों उतना अच्छा
- Audaspace का preview resampling compute में तेज था, लेकिन बहुत सारी extra frequencies बनाता था; rendering resampling की spectrogram quality अच्छी थी
- Audaspace में नई medium resampling quality जोड़ी गई, और लेखक के अनुसार यह लगभग समान result देते हुए computation को करीब 3 गुना तेज कर देती है
- Blender rendering के समय इस medium setting का इस्तेमाल करने लगा
- Windows Ryzen 5950X PC पर Sprite Fright के 2000 frames render करना 92 सेकंड से 73 सेकंड पर आ गया
- संबंधित PR: #116059
Image transforms और filtering
- VSE में image, movie, text, scene आदि visual result बनाने वाले strips पर position, rotation, scale, crop apply किए जा सकते हैं
- ये transforms, strip द्वारा बनाई गई image को नई image में transform करने के तरीके से होते हैं, और पहले से ही CPU पर multithreaded तरीके से process किए जाते थे
- GPU के बजाय CPU पर process होने की वजह यह है कि अभी GPU implementation नहीं है, और जिन render farms में GPU नहीं है वहाँ render करने के use case के लिए CPU fallback फिलहाल जरूरी है
-
Half-pixel error fix
- पुराने code में कई off by half a pixel errors थे; कई मामलों में वे cancel हो जाते थे या दिखते नहीं थे, लेकिन कुछ स्थितियों में सामने आ जाते थे
- छोटे image को 16 गुना upscale करते समय Bilinear filter image को original pixel के आधे हिस्से जितना shift कर देता था, और background color magenta भी बीच में दिखने लगता था
- इसके उलट, image को ठीक 2 गुना downscale करते समय Bilinear filter बिल्कुल filtering नहीं कर रहा था
- Bilinear और दूसरे filters के “off by something” errors ठीक किए गए
- संबंधित PR: #116628
-
Bilinear transparent border handling
- Blender 4.0 से पहले VSE में
Nearest,Bilinear,Subsampled3x3तीन filter options थे, और इनमें से सिर्फ Bilinear result image के आसपास original texel की आधी width जितनी transparency जोड़ता था - media को upscale करते समय यह behavior साफ दिखता था, और किसी को याद नहीं था कि यह फर्क क्यों आया था
- VSE के Bilinear filter code से “transparency में blend” करने वाला behavior हटाया गया
- हालांकि जब सिर्फ rotation apply की जाती थी, तो पुराने transparency handling की वजह से edge पर एक तरह की anti-aliasing मिलती थी, इसलिए उसकी जगह destination image के edge pixel पर transparency anti-aliasing लागू की गई
- संबंधित PR: #117717
- Blender 4.0 से पहले VSE में
-
Cubic, Box, Auto filters
- सामान्य VSE strip transform में cubic filter option नहीं था, और यह केवल special Transform Effect strip में मौजूद था
- Blender में “Bicubic” असल में Cubic B-Spline filter को दर्शाता है, और Mitchell-Netravali filter के B=1, C=0 coefficients जैसा है
- लेखक ने इसे “ringing नहीं, लेकिन blur ज्यादा” वाले विकल्प के रूप में संक्षेपित किया
- VSE में दो तरह के cubic filtering options जोड़े गए
- संबंधित PR: #117100, #117517
- Blender 3.5 का “Subsampled 3x3” filter असल में 3x3 size में hardcoded box filter था, और 3x3 के अलावा किसी ratio में downscale करने पर टूटने लगता था
- यह filter fixed 3x3 की जगह adjusted Box filter में बदल दिया गया
- संबंधित PR: #117584
- users को चुनने के लिए filters ज्यादा हो गए, इसलिए VSE strip के default के रूप में Auto filter option जोड़ा गया
- संबंधित PR: #117853
- scale/rotation न हो तो
Nearest - 2 गुना से अधिक upscale हो तो
Cubic Mitchell - 2 गुना से अधिक downscale हो तो
Box - बाकी मामलों में
Bilinear
-
Filtering performance improvements
- image filtering process भी तेज हुआ
- inner loop से virtual function हटाना, Bilinear filtering में कुछ SIMD लागू करना: #115653
- Cubic filtering simplification और SIMD जोड़ना: #117100
- Box filter की math simplification: #117125
- पूरे screen को cover करने वाली solid image के नीचे के items को skip करने वाला optimization scale होने पर काम नहीं कर रहा था, इसे ठीक किया गया: #117786
- लेखक के PC पर, 3840x2160 project में 1920x1080 image को 2 गुना upscale करके Bilinear filtering इस्तेमाल करने पर, sequencer preview की पूरी drawing 36.8ms से 15.9ms पर आ गई
- upsample filters की तुलना के लिए interactive page भी दिया गया है: aras-p.info/img/misc/upsample_filter_comp_2024
VSE effects optimization
- Blender Studio के real movie datasets में effects ज्यादा इस्तेमाल नहीं हुए थे, लेकिन code में दिखने वाले हिस्सों के आधार पर VSE effects को भी optimize किया गया
- ज्यादातर बदलाव multithreading लागू करने के थे
- Glow effect: multithreaded किया गया, 6–10 गुना तेज #115818
- Wipe effect: multithreaded किया गया, Clock wipe में excessive trigonometric calculations simplify किए गए, 6–20 गुना तेज #115837
- Gamma Cross effect: एक square root call से बचने के लिए complex table और interpolation इस्तेमाल करने का तरीका बदलकर 4 गुना तेज हुआ #115801
- Gaussian Blur effect: duplicate calculations से बचाकर 1.5 गुना तेज हुआ #116089
Final render time में बदलाव
- Blender Studio से मिले तीन datasets के आधार पर, लेखक के PC पर VSE movie final render time लगभग 2 गुना तेज हुआ
- Sprite Fright edit rendering लगभग 13 मिनट से 7 मिनट पर आ गई
- लेखक और speed improvements चाहते हैं, और उन्होंने इसे कुछ इस तरह कहा कि “अगर 2x speedup तीन बार और हो जाए तो काफी अच्छा होगा”
काम करने का तरीका और अगले कदम
- user-visible changes के अलावा tests जोड़ने, refactoring और cleanup work के लिए भी pull requests थे, और कुल 37 pull requests complete, reviewed और merged हुए
- लेखक का आकलन है कि इतना काम “real job” में करना शायद मुश्किल होता
- वे कहते हैं कि Unity में 2015–2022 के बीच, इसी समय में ऊपर के काम का लगभग 30%, शायद उससे भी कम, हो पाता
- उन्होंने यह भी जोड़ा कि 2010 के आसपास की “ancient” Unity में शायद यह संभव हो सकता था
- उनका मानना है कि company size, process, expectations, communication, politics जैसे factors मिलें तो paid company environment में वही काम उल्टा धीमा हो सकता है या बीच में cancel भी हो सकता है
- वे उम्मीद करते हैं कि Blender ऐसे scale, complexity और workflow में न जाए जहाँ process लोगों की मदद करने के बजाय उनका उत्साह तोड़ दे और उन्हें धीमा कर दे
- Blender 4.1 beta हो चुका है, इसलिए feature के लिहाज से यह complete state में है, और VSE से जुड़े 4.1 changes अभी release notes की state में शामिल हैं
- Blender 4.2 work शुरू हो रहा है, और आगे भी वे बिना किसी स्पष्ट plan के VSE पर काम जारी रखने का सोच रहे हैं
- progress Weekly Updates forum section में देखी जा सकती है
1 टिप्पणियां
Hacker News की राय
अगर यह “असली नौकरी” होती, तो शायद मैं ऐसा काम नहीं कर पाता
करियर में अगर कोई बात ठीक नहीं चली, तो वह यह रही कि बिना पैसे वाले किसी ऐसे unpaid project में, जिसमें बिल्कुल अनोखी गणित खुद हल करनी हो, मैं दो महीनों में आमतौर पर दो साल में जितना करता उससे ज्यादा कर देता हूं, लेकिन पैसे लेकर किए जाने वाले projects में नतीजे अक्सर औसत ही रहते हैं
मैंने सचमुच बहुत कोशिश की, फिर भी बीच का रास्ता नहीं ढूंढ पाया, और पिछले साल जब उस काम के लिए पैसे मिलने की संभावना बनी जिसे मैं मुफ्त में कर रहा था, तो आखिरकार मैं उसे छू भी नहीं पाया
फिर मैं Marx की alienation theory से रूबरू हुआ, और चीजें कहीं ज्यादा समझ में आने लगीं। उन्होंने इस observation से शुरुआत की थी कि काम स्वस्थ लोगों की मुख्य गतिविधियों में से एक है, लेकिन माना कि इसे दूसरों के लिए काम करने और अपने श्रम के उत्पाद से अलग-थलग हो जाने के साथ गड्डमड्ड नहीं करना चाहिए
https://en.m.wikipedia.org/wiki/Marx's_theory_of_alienation
कुछ जगहों पर 1–2 हफ्ते की ऐसी buffer अवधि रखने का अच्छा सिस्टम होता है, जिसमें आप कुछ भी कर सकते हैं, और यह इस समस्या को कम कर देता है
passion project में आप पैसे नहीं ले रहे होते, इसलिए expectations कम होती हैं, कुछ करने की बाध्यता भी नहीं होती, और व्यावहारिक रूप से आप अपनी पसंद का काम करने के लिए स्वतंत्र होते हैं। इसलिए आप ऐसे काम चुनते हैं जो आपके लिए दिलचस्प और प्रभावशाली हों, जैसे किसी नई technology या tool को explore करना
जैसे ही पैसा शामिल होता है, पैसे देने वाले व्यक्ति की expectations आ जाती हैं, और नए व अपरिचित प्रयोग इसलिए मुश्किल हो जाते हैं क्योंकि उनके असफल होने की संभावना ज्यादा होती है
आखिरकार, जब पैसा दांव पर होता है, तो लोग संभावित रूप से बेहतर समाधान होने पर भी, अगर risk बड़ा हो तो उससे बचते हैं और predictable results को तरजीह देते हैं
वाकई प्रभावशाली है, और यह भी साफ है कि मूल लेखक बस सड़क से चलते-चलते Blender HQ में नहीं घुस गए थे। Unity में उनका लंबा अनुभव इस domain को समझने में काफी मददगार रहा होगा
यह बदलाव [1] खास तौर पर अच्छा लगा। image processing चरण को optimize करते हुए उन्होंने table-based “optimization” की बहुत सारी चीजें हटाकर उसे सीधे floating-point calculations से बदल दिया, और मूल लेखक की machine पर यह लगभग 4 गुना तेज हो गया। शानदार
[1]: https://projects.blender.org/blender/blender/pulls/115801/fi...
return c * c;सचमुच sRGB gamma का अच्छा approximation है या नहींपिछले कुछ सालों में मुझे यह pattern सबसे ज्यादा पसंद आया है कि Aras अलग-अलग open source graphics projects में अचानक आते हैं, जबरदस्त speedups और improvements करते हैं, फिर किसी और random graphics project पर जाकर वही दोहराते हैं
https://github.com/aras-p/UnityGaussianSplatting
मैं अपने music player MusicBee के साथ भी ऐसा कुछ करना चाहता हूं
अगर वह open source होता। creator अब लगभग उस पर हाथ नहीं लगाते, यह पूरी तरह free था और हमेशा रहा है, फिर भी समझ नहीं आता कि यह open source क्यों नहीं है
इतनी सारी छोटी-छोटी चिढ़ाने वाली समस्याएं, broken या slow या अजीब minor parts हैं कि मैं उन्हें खाली समय में जरूर ठीक करना चाहूंगा
और अब FooBar जैसी किसी दूसरी चीज पर जाना बहुत बड़ा काम है। HQPlayer भी आजमाया, लेकिन उसका UI/UX इतना भयानक था कि switch नहीं कर पाया
उन्होंने कहा था कि जब project जारी रखने का मन नहीं रहेगा, तब source code जारी करना विचार करने लायक विकल्पों में से एक है, लेकिन यह programming में मजा आने की वजह से किया जाने वाला hobby project है और इसे कभी professional तरीके से चलाया नहीं जाएगा
अपने day job में वे लोगों को manage करने में पर्याप्त समय बिताते हैं, इसलिए यहां भी वैसा नहीं करना चाहते, और जिन लोगों को “अगर bus ने टक्कर मार दी तो क्या होगा” जैसी चिंता है, उनके लिए कोई दूसरा app इस्तेमाल करना ही सही है
https://web.archive.org/web/20170721042120/https://getmusicb...
अगर उसका maintenance हो रहा होता तो उसे Wine में चलाने पर विचार करता, लेकिन अब मैंने music manager की अवधारणा ही छोड़ दी है और बस mpv में album चलाकर सुनता हूं। और हमेशा album के हिसाब से सुनता हूं। playlists नहीं चाहिए
2020 से सभी video editing के लिए Blender VSE इस्तेमाल कर रहा हूं, और इसमें सुधार होते देखना सचमुच अच्छा है
stability और feature set को देखते हुए मुझे यह पहले से ही Linux पर सबसे अच्छा video editor लगता था। Blender के मौजूदा animation tools का पूरा इस्तेमाल कर पाना भी इसका फायदा है
VSE को सच में बहुत प्यार और सुधार की ज़रूरत है। मैं पॉडकास्ट के लिए सभी टूल open source इस्तेमाल करना चाहता था, लेकिन Blender में chroma key वाला mp4 sequence render करने पर 1.5 घंटे के वीडियो में 10 घंटे लग गए
आखिरकार मैं DaVinci Resolve के free version पर चला गया
साथ ही, जब re-encoding की ज़रूरत नहीं होती तब भी यह DaVinci Resolve की तरह skip नहीं कर पाता और हर frame को एक-एक करके render करता है। अगर यह हिस्सा सुधर जाए तो Blender की performance और efficiency को बहुत फायदा होगा
पहले मैंने एक plugin [1] के साथ प्रयोग किया था, जो timeline के अलग-अलग points पर कई render jobs को अलग processes के रूप में शुरू करता था, और इससे rendering काफी तेज़ हो सकती थी
अब मैं Linux पर भी Resolve पर चला गया हूं, क्योंकि मैं Blackmagic camera इस्तेमाल करता हूं और वह workflow उसके साथ बेहतर fit बैठता है
[1] https://github.com/AkBKukU/blenderSubprocessRender
अब मैं नया version Final Cut Pro में बना रहा हूं
Blender 3D program के किसी भी हिस्से को और तेज़ बनाना काफी मुश्किल लगता है। यह पहले से ही साफ तौर पर सबसे तेज़ शुरू होने वाला 3D application है, और GUI response भी सबसे तेज़ है
Houdini दूसरे नंबर पर है, लेकिन बहुत करीब वाला दूसरा नंबर नहीं
कुछ साल पहले ‘blobby’ generator code में बदलाव करते हुए मैंने multi-threading जोड़ दी थी और उसे काफी धीमा बना दिया था। multi-threading के overhead से आगे निकलने पर वह तेज़ हो जाता था, लेकिन जहां तक याद है, वह आम use cases में अच्छी तरह नहीं आता था, इसलिए मैंने छोड़ दिया। निश्चित रूप से मुझसे कुछ गलतियां भी हुई होंगी
उदाहरण के लिए texture painting में हर pixel पर pointer indirection लगभग 3 बार होती है, और मेरे PC पर भी यह काफी अटकता है
“क्या आपको पता था कि Blender में video editing tools का set है? मुझे भी नहीं पता था :)” ऐसा कहा गया था, लेकिन Blender से animation बनाने वाले ज्यादातर लोग शायद जानते होंगे
क्योंकि rendered frames को video file में बदलने का यह basic तरीका है
compositor का इस्तेमाल करके पहले से rendered frame sequence को video file में भी बदला जा सकता है
हालांकि ज्यादातर लोग शायद video editing के लिए Resolve जैसे दूसरे programs को पसंद करेंगे, और VSE “basic cuts चाहिए लेकिन transforms, titles, effects नहीं चाहिए” वाले सीमित दायरे में है, इसलिए लगता है कि इसका ज्यादा इस्तेमाल नहीं होता
अच्छा होगा अगर कोई transforms और effects में सुधार जारी रखे और किसी दिन 3-point editing भी जोड़ दे
ओह, यह Aras था। वह कमाल है। मुझे याद है कि उसका full name शायद Really Awesome Aras था
वह graphics coding वगैरह में बेहतरीन है, और coding करते समय उसके पास अच्छा flow state भी लगता है
उसकी writing पढ़ने में अच्छी और मजेदार है। ऐसा लगता है जैसे किसी इंसान को बोलते हुए सुन रहे हों। बीच में “However!” जैसे वाक्य भी ऐसे ही लगते हैं
अंत में यह बात भी relatable लगी कि सामान्य company में standard culture और process expectations के नीचे दब जाने पर productivity 30% रह जाती है। employees को “उनके काम” तक बांधकर रखने की cost में सचमुच भारी productivity loss शामिल होता है
ऐसी examples लगातार देखते हुए उम्मीद है कि technologists लोग लोगों और activities को बेहतर तरीके से organize करना सीखेंगे, और उस सीख पर भरोसा करके high-productivity/high-flow को असली organizational methods में शामिल करना शुरू करेंगे
जैसा लेख संकेत देता है, ऐसा करने से tech industry में काम करना और ज्यादा आनंददायक हो सकता है। यह technology से खेलने जितना लगभग मजेदार भी हो सकता है
https://projects.blender.org/blender/blender/pulls/116089 के बारे में जोड़ते हुए,
inlineसबसे पहले one definition rule को प्रभावित करता हैआसान शब्दों में, अगर आप header में function define करके उसे कई
.ccfiles से call करते हैं, तो जब तक उसेinlineके रूप में mark नहीं करते, linker error आएगाactual inline optimization पर इसका असर “कुछ नहीं” से लेकर “compiler linking method की वजह से अलग weighting दे सकता है”, और “वास्तव में hint के रूप में लेता है” तक हो सकता है; link-time optimization में भी इसी तरह की बातें लागू होती हैं
compiler को बहुत stronger inline signal देना हो, खासकर अगर function सिर्फ उसी file में इस्तेमाल होता है जहां define है, तो उसे anonymous namespace के अंदर define करना बेहतर है
मूल रूप से उस function पर
inlineलगाने का मकसद actual inlining पाने की कोशिश रहा होगा। measurable benefit साफ नहीं है, लेकिन असंभव भी नहीं