เผลอได้ใช้ Blender VSE
(aras-p.info)- Aras เองก็ไม่รู้มาก่อนว่า Blender มี Video Sequence Editor (VSE) แต่หลังจากไปเยี่ยม Blender HQ ก็ได้ช่วยปรับปรุงด้านประสิทธิภาพและคุณภาพให้ Blender 4.1 แบบพาร์ตไทม์อยู่ราวสองเดือน
- การเปลี่ยนแปลงที่เห็นชัดที่สุดคือ ความลื่นไหลของไทม์ไลน์ โดยในโปรเจ็กต์ Sprite Fright ที่มี strip ให้เห็นราว 3000 รายการ การเลื่อนและแพน UI ดีขึ้นจากประมาณ 15fps เป็นมากกว่า 60fps
- มีการนำ มัลติเธรด, SIMD และการทำคณิตศาสตร์ให้เรียบง่ายขึ้น ไปใช้กับการแปลง RGB↔YUV บน ffmpeg, การรีแซมเพิลเสียงใน Audaspace, การแปลงและฟิลเตอร์ภาพ รวมถึงการประมวลผลเอฟเฟ็กต์ของ VSE
- เวลาการเรนเดอร์สุดท้ายของภาพยนตร์ใน VSE บนชุดข้อมูล Blender Studio สามชุด เร็วขึ้น ประมาณ 2 เท่า บนพีซีของผู้เขียน และการเรนเดอร์ Sprite Fright ลดจากเกือบ 13 นาทีเหลือ 7 นาที
- มี 37 pull request ที่ได้รับการรีวิวและ merge แล้ว โดยการเปลี่ยนแปลงชุดนี้กำลังเข้า Blender 4.1 และงาน VSE หลังจากนั้นจะดำเนินต่อใน Blender 4.2 เป็นต้นไป
ที่มาของการได้มาช่วย Blender VSE
- Aras เดินทางไป Amsterdam เพื่อเข้าร่วม Unite 2023 ของ Unity และใช้เวลาว่างแวะไปเยี่ยม Blender HQ
- ที่นั่น Francesco และ Sergey ถามว่าอยากช่วยพัฒนา VSE หรือไม่ และหลังจากนั้นเขาก็เริ่มลงมือแตะ Video Sequence Editor ของ Blender
- แม้จะยังไม่ค่อยรู้เรื่องการตัดต่อวิดีโอ, ไทม์ไลน์, ซีเควนเซอร์, color grading, ffmpeg และ audio mixing มากนัก แต่ก็เริ่มจากงาน ปรับแต่งประสิทธิภาพ ที่มีข้อถกเถียงน้อยก่อน
- หลังทำงานแบบพาร์ตไทม์ราวสองเดือน ก็ได้ชุดการปรับปรุงที่จะเข้า Blender 4.1
- Blender 4.1 เข้าสู่สถานะเบตาแล้ว และดาวน์โหลดได้จาก daily builds ทั่วไป
การวาดไทม์ไลน์และความลื่นไหลของ UI
- ไทม์ไลน์ของ VSE อยู่บริเวณด้านล่างของหน้าจอ และเมื่อซูมออกทั้งโปรเจ็กต์ Sprite Fright edit จะเห็น 3000 strip ได้พร้อมกัน
- เดิมทีแค่เลื่อนหรือแพนในไทม์ไลน์นี้ การรีเฟรช UI ก็ทำได้เพียงราว 15fps
- หลังการเปลี่ยนแปลง ทำงานได้ที่ มากกว่า 60fps
- PR ที่เกี่ยวข้อง: #115311
- คอขวดอยู่ที่โครงสร้างที่ส่ง draw call ไปยัง graphics API ทีละสองสามเหลี่ยม และใน Superluminal profiler เวลาส่วนใหญ่หมดไปกับฟังก์ชัน “เริ่มวาด quad หนึ่งอัน” และ “จบการวาด quad หนึ่งอัน”
- ระหว่างทางยังได้แก้พฤติกรรมผิดปกติของ การแสดง waveform เสียง และเก็บรายละเอียด UI เพิ่มเติม โดยการแสดง waveform ถูกเปิดเป็นค่าเริ่มต้นแล้ว
- issue ที่เกี่ยวข้อง: #115274
ปรับปรุงคุณภาพและความเร็วของการแสดงสโคป
- VSE มีตัวเลือกการแสดง สโคป (scope) มาตรฐาน เช่น histogram ของภาพ, waveform และ vectorscope
- เดิม histogram ถูกวาดแบบเป็นพิกเซลและมีความอิ่มสีสูงมาก แต่ตอนนี้แสดงผลด้วย polygon ที่เนียนขึ้น มี grid และใช้ความอิ่มสีต่ำลง
- PR ที่เกี่ยวข้อง: #116798
- ตัวเลือก parade ของ waveform มีปัญหาอิ่มตัวเร็วเกินไป และหลังใส่มัลติเธรดแล้วก็เร็วขึ้น 15 เท่า
- PR ที่เกี่ยวข้อง: #115579
- หกเหลี่ยมสีรอบนอกของ vectorscope เดิมมีอาการเป็นพิกเซลหนักมาก จึงคัดลอก design ที่อัปเดตแล้วจาก vectorscope ของ image editor มาใช้
- PR ที่เกี่ยวข้อง: #117738
- ตัวเลือก zebra stripes สำหรับแสดงบริเวณที่ overexposed ก็เร็วขึ้น 2–3 เท่าเช่นกัน
- PR ที่เกี่ยวข้อง: #115622
- ผู้เขียนยังเสริมว่า สักวันหนึ่งสโคปทั้งหมด รวมถึงสโคปใน image editor ควรถูกประมวลผลด้วย GPU compute shader
การปรับแต่ง ffmpeg RGB↔YUV
- Blender ใช้ไลบรารี ffmpeg เป็นหลักในการอ่านและเขียนเสียงกับวิดีโอ
- ภายใน Blender ใช้โค้ดไลบรารีอย่าง libavcodec ไม่ใช่เครื่องมือ command line ของ ffmpeg และ
libswscaleทำหน้าที่แปลง RGB↔YUV ของเฟรมภาพยนตร์ - แม้
libswscaleจะรองรับการแปลงแบบมัลติเธรด แต่ถ้าใช้แค่sws_getContext()กับsws_scale()จะทำงานแบบเธรดเดียวทั้งหมด - หากต้องการใช้มัลติเธรด ต้องตั้งค่าพารามิเตอร์
"threads"ตอนเริ่มต้น จึงต้องใช้sws_alloc_context(),av_opt_set_int(),sws_init_context()โดยตรง - นอกจากนี้
sws_scale()ก็ไม่ได้ทำมัลติเธรดภายใน ทำให้ต้องใช้sws_scale_frame()แทน และระหว่างนั้นก็พบปัญหาในวิธีสร้างAVFrameด้วย - ผลลัพธ์คือการแปลง RGB→YUV ตอนเขียนไฟล์ภาพยนตร์เร็วขึ้นอย่างมาก
- PR ที่เกี่ยวข้อง: #116008
- ฝั่งการอ่านไฟล์ภาพยนตร์ก็เปลี่ยนมาใช้การแปลง YUV→RGB แบบมัลติเธรด และรวมการกลับภาพแนวตั้งเข้าไปในงานเดียวกัน
- PR ที่เกี่ยวข้อง: #116309
การรีแซมเพิลเสียง
- ระหว่างเรนเดอร์วิดีโอใน VSE พบว่าเวลาเกือบครึ่งของการ “สร้างเฟรมวิดีโอหรือเสียง” ถูกใช้ไปภายในไลบรารีเสียง Audaspace ที่ Blender ใช้งาน
- คอขวดไม่ใช่การเข้ารหัสเสียง แต่เป็นการ มิกซ์ ก่อนเข้ารหัส โดยส่วนใหญ่เกิดจากการรีแซมเพิลเมื่อมี audio strip อย่าง 44.1kHz ปะปนในภาพยนตร์ 48kHz
- Audaspace มีโหมดรีแซมเพิลอยู่สองแบบ
- การเล่นภายใน Blender: Linear resampler ที่ใช้ linear interpolation ระหว่าง sample
- การเรนเดอร์ภาพยนตร์: รีแซมเพลอร์ที่อิง Julius O Smith’s algorithm
- คุณภาพของรีแซมเพลอร์ถูกเปรียบเทียบด้วยการรีแซมเพิลเสียงสังเคราะห์ที่มีความถี่เดี่ยวเพิ่มขึ้น แล้วดูผลผ่าน spectrogram
- เป้าหมายคือให้ผลลัพธ์มีความถี่แทรกให้น้อยที่สุด คล้ายการตั้งค่า “best” ของ Audacity
- การรีแซมเพิลสำหรับ preview ของ Audaspace คำนวณเร็วแต่สร้างความถี่แทรกจำนวนมาก ขณะที่การรีแซมเพิลสำหรับ rendering ให้คุณภาพ spectrogram ที่ดี
- จึงเพิ่ม คุณภาพการรีแซมเพิลระดับ medium เข้าไปใน Audaspace ซึ่งจากมุมมองของผู้เขียนให้ผลแทบไม่ต่างกัน แต่คำนวณเร็วขึ้นราว 3 เท่า
- Blender จะใช้การตั้งค่า medium นี้ตอนเรนเดอร์
- บนพีซี Windows Ryzen 5950X การเรนเดอร์ Sprite Fright 2000 เฟรมลดจาก 92 วินาทีเหลือ 73 วินาที
- PR ที่เกี่ยวข้อง: #116059
การแปลงและฟิลเตอร์ภาพ
- ใน VSE strip ที่สร้างผลลัพธ์ภาพ เช่น image, movie, text และ scene สามารถใช้ตำแหน่ง การหมุน สเกล และ crop ได้
- การแปลงเหล่านี้คือการ แปลง ภาพที่ strip สร้างออกมาไปเป็นภาพใหม่ และเดิมก็ประมวลผลแบบมัลติเธรดบน CPU อยู่แล้ว
- เหตุที่ยังทำบน CPU ไม่ใช่ GPU เพราะยังไม่มี implementation บน GPU และในกรณีใช้งานที่ต้องเรนเดอร์บน render farm ที่ไม่มี GPU ก็ยังต้องมี CPU fallback อยู่ในตอนนี้
-
แก้ความคลาดเคลื่อนระดับ half-pixel
- โค้ดเดิมมีข้อผิดพลาดแบบ off by half a pixel อยู่หลายจุด ซึ่งส่วนมากหักล้างกันเองหรือมองไม่เห็น แต่ในบางสถานการณ์จะเห็นชัด
- เมื่อต้องขยายภาพเล็ก 16 เท่า Bilinear filter จะเลื่อนภาพออกไปครึ่งพิกเซลจากพิกเซลต้นฉบับ และยังมีสีพื้นหลัง magenta แทรกเข้ามาด้วย
- ในทางกลับกัน เมื่อลดภาพลงครึ่งหนึ่งพอดี Bilinear filter กลับไม่ทำการฟิลเตอร์เลย
- จึงมีการแก้ข้อผิดพลาด “off by something” ทั้งของ Bilinear และฟิลเตอร์อื่น ๆ
- PR ที่เกี่ยวข้อง: #116628
-
การจัดการขอบโปร่งใสของ Bilinear
- ก่อน Blender 4.0 นั้น VSE มีตัวเลือกฟิลเตอร์สามแบบคือ
Nearest,Bilinear,Subsampled3x3และมีเพียง Bilinear เท่านั้นที่เพิ่ม ความโปร่งใส กว้างครึ่ง texel รอบภาพผลลัพธ์ - พฤติกรรมนี้เห็นได้ชัดเวลา zoom สื่อให้ใหญ่ขึ้น และไม่มีใครจำได้แล้วว่าทำไมถึงมีความต่างแบบนี้
- จึงลบพฤติกรรม “blend ด้วยความโปร่งใส” ออกจากโค้ด Bilinear filter ของ VSE
- แต่ในกรณีที่มีแค่การหมุน การจัดการความโปร่งใสเดิมช่วยให้ขอบเกิด anti-aliasing แบบหนึ่งอยู่แล้ว จึงเปลี่ยนไปใช้ transparency anti-aliasing กับ edge pixel ของภาพปลายทางแทน
- PR ที่เกี่ยวข้อง: #117717
- ก่อน Blender 4.0 นั้น VSE มีตัวเลือกฟิลเตอร์สามแบบคือ
-
ฟิลเตอร์ Cubic, Box และ Auto
- ปกติการ transform ของ strip ทั่วไปใน VSE ไม่มีตัวเลือก cubic filter มีเฉพาะใน strip แบบ Transform Effect พิเศษเท่านั้น
- ใน Blender คำว่า “Bicubic” แท้จริงหมายถึงฟิลเตอร์ Cubic B-Spline ซึ่งตรงกับค่าสัมประสิทธิ์ B=1, C=0 ของ Mitchell-Netravali filter
- ผู้เขียนสรุปมันว่าเป็นตัวเลือกที่ “ไม่มี ringing แต่เบลอมาก”
- ตอนนี้มีตัวเลือก cubic filtering สองแบบเพิ่มเข้ามาใน VSE
- PR ที่เกี่ยวข้อง: #117100, #117517
- ฟิลเตอร์ “Subsampled 3x3” ใน Blender 3.5 แท้จริงคือ box filter ที่ hardcode ขนาด 3x3 และจะเริ่มให้ผลเสียเมื่อย่อภาพในสัดส่วนที่ไม่ใช่ 3x3
- ฟิลเตอร์นี้จึงถูกเปลี่ยนเป็น Box filter ที่ปรับขนาดได้ แทนที่จะเป็น 3x3 แบบตายตัว
- PR ที่เกี่ยวข้อง: #117584
- เนื่องจากมีฟิลเตอร์ให้ผู้ใช้เลือกมากขึ้น จึงเพิ่ม Auto filter option เป็นค่าเริ่มต้นให้ strip ใน VSE
- PR ที่เกี่ยวข้อง: #117853
- ถ้าไม่มีการสเกลหรือหมุน ให้ใช้
Nearest - ถ้าขยายเกิน 2 เท่า ให้ใช้
Cubic Mitchell - ถ้าย่อเกิน 2 เท่า ให้ใช้
Box - นอกนั้นใช้
Bilinear
-
ปรับปรุงประสิทธิภาพของฟิลเตอร์
- กระบวนการฟิลเตอร์ภาพก็เร็วขึ้นเช่นกัน
- ลบ virtual function ออกจากลูปภายใน และใส่ SIMD บางส่วนใน Bilinear filtering: #115653
- ทำ Cubic filtering ให้ง่ายขึ้นและเพิ่ม SIMD: #117100
- ทำคณิตศาสตร์ของ Box filter ให้ง่ายขึ้น: #117125
- แก้ปัญหาที่ optimization สำหรับข้ามรายการใต้ solid image ที่ปิดเต็มหน้าจอไม่ทำงานเมื่อมีการสเกล: #117786
- บนพีซีของผู้เขียน เมื่อใช้ภาพ 1920x1080 หนึ่งภาพในโปรเจ็กต์ 3840x2160 แล้วขยาย 2 เท่าพร้อม Bilinear filtering เวลาวาด sequencer preview ทั้งหมดลดจาก 36.8ms เหลือ 15.9ms
- ยังมีหน้าอินเทอร์แอกทีฟสำหรับเทียบฟิลเตอร์ upsample ให้ดูด้วย: aras-p.info/img/misc/upsample_filter_comp_2024
การปรับแต่งเอฟเฟ็กต์ VSE
- แม้ชุดข้อมูลภาพยนตร์จริงจาก Blender Studio จะไม่ได้ใช้ effect มากนัก แต่ก็มีการปรับแต่ง effect ของ VSE จากส่วนของโค้ดที่เห็นได้ชัด
- การเปลี่ยนแปลงส่วนใหญ่คือการใส่ มัลติเธรด
- Glow effect: ใส่มัลติเธรด เร็วขึ้น 6–10 เท่า #115818
- Wipe effect: ใส่มัลติเธรด, ทำการคำนวณตรีโกณมิติที่มากเกินไปของ Clock wipe ให้ง่ายขึ้น เร็วขึ้น 6–20 เท่า #115837
- Gamma Cross effect: เปลี่ยนจากวิธีที่ใช้ตารางและ interpolation ซับซ้อนเพื่อเลี่ยงการเรียก square root เพียงหนึ่งครั้ง ทำให้เร็วขึ้น 4 เท่า #115801
- Gaussian Blur effect: เลี่ยงการคำนวณซ้ำ ทำให้เร็วขึ้น 1.5 เท่า #116089
การเปลี่ยนแปลงของเวลาเรนเดอร์สุดท้าย
- จากชุดข้อมูลสามชุดที่ได้จาก Blender Studio เวลาการเรนเดอร์สุดท้ายของภาพยนตร์ใน VSE บนพีซีของผู้เขียนเร็วขึ้น ประมาณ 2 เท่า
- การเรนเดอร์ Sprite Fright edit ลดจากเกือบ 13 นาทีเหลือ 7 นาที
- ผู้เขียนยังหวังว่าจะเร่งได้มากกว่านี้ และพูดประมาณว่า “ถ้าเพิ่มความเร็วได้ 2 เท่าอีกสักสามครั้งก็คงดีมาก”
วิธีการทำงานและก้าวถัดไป
- นอกเหนือจากการเปลี่ยนแปลงที่ผู้ใช้มองเห็น ยังมี pull request สำหรับเพิ่มการทดสอบ, refactor และเก็บกวาดโค้ด รวมแล้วมี 37 pull request ที่เสร็จสิ้น ได้รับการรีวิว และ merge
- ผู้เขียนมองว่างานระดับนี้คงทำได้ยากใน “งานจริง”
- หากเป็นที่ Unity ช่วงปี 2015–2022 เขาคิดว่าในเวลาเท่ากันอาจทำได้ราว 30% ของงานข้างต้น หรืออาจน้อยกว่านั้น
- และเสริมว่าใน Unity ยุค “ancient” ราวปี 2010 อาจพอเป็นไปได้
- เขามองว่าปัจจัยอย่างขนาดบริษัท, กระบวนการ, ความคาดหวัง, การสื่อสาร และการเมือง เมื่อรวมกันแล้ว อาจทำให้งานแบบเดียวกันในสภาพแวดล้อมบริษัทที่รับเงินเดือนกลับช้าลงหรือถูกยกเลิกกลางทางได้
- เขาหวังว่า Blender จะไม่ไปสู่ระดับของขนาด ความซับซ้อน หรือ workflow ที่กระบวนการกลายเป็นตัวบั่นทอนแรงจูงใจและทำให้คนทำงานช้าลง แทนที่จะช่วยเหลือพวกเขา
- เนื่องจาก Blender 4.1 เข้าสู่สถานะเบตาแล้ว จึงถือว่าด้านฟีเจอร์เสร็จสมบูรณ์ และการเปลี่ยนแปลงเกี่ยวกับ VSE ใน 4.1 ก็ถูกรวมอยู่ในสถานะ release notes ปัจจุบัน
- งานของ Blender 4.2 เริ่มขึ้นแล้ว และหลังจากนั้นผู้เขียนตั้งใจจะยังคงแตะ VSE ต่อไปโดยยังไม่มีแผนที่ตายตัว
- ติดตามความคืบหน้าได้ในหมวดฟอรัม Weekly Updates
1 ความคิดเห็น
ความเห็นจาก Hacker News
ถ้าเป็น “งานจริง” ก็คงทำแบบนี้ไม่ได้
ถ้ามีอะไรในเส้นทางอาชีพที่ไม่ค่อยลงตัว ก็คือการที่ในโปรเจกต์ไม่รับค่าจ้างซึ่งได้แก้โจทย์คณิตศาสตร์ที่แปลกใหม่จริง ๆ ด้วยตัวเอง กลับทำผลงานได้ภายในสองเดือนมากกว่างานปกติสองปีรวมกันเสียอีก แต่พอเป็นโปรเจกต์ที่รับเงิน ผลลัพธ์กลับออกมาอยู่ในระดับกลาง ๆ เป็นส่วนใหญ่
ทั้งที่พยายามอย่างมากแล้วก็ยังหาจุดกึ่งกลางไม่เจอ และเมื่อปีที่แล้วพองานที่ทำฟรีเริ่มมีโอกาสจะได้เงิน สุดท้ายก็กลับแตะต้องมันไม่ได้ไปเลย
แล้วพอได้เจอกับทฤษฎีความแปลกแยกของ Marx ทุกอย่างก็เริ่มสมเหตุสมผลขึ้นมาก เขาเริ่มจากข้อสังเกตว่างานคือกิจกรรมหลักที่คนสุขภาพดีทำกัน แต่ไม่ควรเอาสิ่งนั้นไปปนกับการทำงานเพื่อคนอื่นและการถูกตัดขาดจากผลผลิตแห่งแรงงานของตัวเอง
https://en.m.wikipedia.org/wiki/Marx's_theory_of_alienation
บางที่มีระบบที่ดี โดยเผื่อช่วงกันชนไว้ 1~2 สัปดาห์ให้ไปทำอะไรก็ได้ ซึ่งช่วยบรรเทาปัญหาแบบนี้ได้
ใน passion project นั้นไม่ได้รับเงิน จึงมีความคาดหวังต่ำ ไม่มีภาระว่าต้องทำอะไรให้ได้ และในทางปฏิบัติก็มีอิสระจะทำสิ่งที่ตัวเองอยากทำได้เต็มที่ เลยเลือกทำงานที่ตัวเองสนใจและมีผลกระทบได้ เช่นการสำรวจเทคโนโลยีหรือเครื่องมือใหม่ ๆ ที่ตัวเองสนใจ
แต่พอมีเงินเข้ามาเกี่ยว ความคาดหวังของคนจ่ายเงินก็เข้ามาด้วย และการลองอะไรใหม่ ๆ ที่ไม่คุ้นเคยก็ยิ่งยาก เพราะมีโอกาสล้มเหลวสูง
สุดท้ายเมื่อมีเงินเป็นเดิมพัน คนก็มักหลีกเลี่ยงความเสี่ยงแม้อาจมีทางออกที่ดีกว่าอยู่ และเลือกผลลัพธ์ที่คาดเดาได้มากกว่า
น่าประทับใจจริง ๆ และก็ชัดเจนว่าผู้เขียนต้นฉบับไม่ได้แค่เดินจากถนนเข้าไปที่ Blender HQ เฉย ๆ ประสบการณ์ยาวนานที่สะสมมาจาก Unity น่าจะช่วยให้เข้าใจโดเมนนี้ได้มากทีเดียว
การเปลี่ยนแปลงนี้ [1] ดีมากเป็นพิเศษ ระหว่างที่ปรับปรุงประสิทธิภาพขั้นตอนประมวลผลภาพ ก็ลบ “การเพิ่มประสิทธิภาพ” แบบอิงตารางออกไปจำนวนมาก แล้วเปลี่ยนเป็นการคำนวณ floating-pointตรง ๆ ซึ่งบนเครื่องของผู้เขียนต้นฉบับเร็วขึ้นราว 4 เท่า ยอดเยี่ยมมาก
[1]: https://projects.blender.org/blender/blender/pulls/115801/fi...
return c * c;เป็นค่าประมาณของsRGB gammaที่ดีจริงไหมสิ่งที่ชอบที่สุดในช่วงไม่กี่ปีมานี้คือการที่ Aras โผล่เข้าไปในโปรเจกต์กราฟิกโอเพนซอร์สหลายตัวแบบไม่ทันตั้งตัว สร้างการเพิ่มความเร็วและการปรับปรุงแบบมหาศาล แล้วก็ย้ายไปยังโปรเจกต์กราฟิกสุ่มอีกตัวเพื่อทำแบบเดิมซ้ำอีก
https://github.com/aras-p/UnityGaussianSplatting
อยากทำอะไรแบบนี้กับโปรแกรมเล่นเพลงที่ใช้อยู่คือ MusicBee เหมือนกัน
ถ้ามันเป็นโอเพนซอร์สนะ ผู้พัฒนาแทบไม่ได้แตะมันแล้วตอนนี้ มันฟรีมาโดยตลอด และก็ยังไม่เข้าใจว่าทำไมถึงไม่เป็นโอเพนซอร์ส
มีปัญหาจุกจิกที่น่ารำคาญเล็ก ๆ น้อย ๆ เยอะมาก ทั้งส่วนที่พัง ช้า หรือแปลก ๆ จนอยากใช้เวลาว่างเข้าไปแก้จริง ๆ
และตอนนี้จะย้ายไปอย่างอื่นอย่าง FooBar ก็งานใหญ่เกินไปแล้ว เคยลอง HQPlayer ด้วย แต่ UI/UX แย่มากจนย้ายไปไม่ได้
ถ้าวันหนึ่งไม่อยากทำโปรเจกต์นี้ต่อแล้ว การเปิดซอร์สโค้ดก็อาจเป็นหนึ่งในตัวเลือกที่พิจารณาได้ แต่เขาบอกว่านี่เป็นโปรเจกต์งานอดิเรกที่ทำเพราะสนุกกับการเขียนโปรแกรม และจะไม่มีวันบริหารมันแบบมืออาชีพ
เขาใช้เวลากับการจัดการคนในงานประจำมากพอแล้ว เลยไม่อยากมาทำแบบนั้นต่อที่นี่ด้วย และยังบอกอีกว่าถ้าใครกังวลเรื่องแนว “ถ้าโดนรถบัสชนจะทำยังไง” ก็ควรไปใช้แอปอื่น
https://web.archive.org/web/20170721042120/https://getmusicb...
ถ้ามันยังได้รับการบำรุงรักษาอยู่ก็คงพิจารณารันผ่าน Wine แต่ตอนนี้เลิกยึดติดกับแนวคิดเรื่องตัวจัดการเพลงไปแล้ว แล้วก็เปิดอัลบั้มที่อยากฟังผ่าน mpv เฉย ๆ แถมฟังเป็นอัลบั้มตลอดด้วย เพลย์ลิสต์ไม่เอาแล้ว
ตั้งแต่ปี 2020 มาก็ใช้Blender VSEตัดต่อวิดีโอทุกอย่างมาตลอด และดีใจมากที่ได้เห็นมันพัฒนาขึ้น
ถ้ามองเรื่องความเสถียรและชุดความสามารถ ก็คิดว่ามันเป็นโปรแกรมตัดต่อวิดีโอที่ดีที่สุดบน Linux อยู่แล้ว และการที่ใช้เครื่องมือแอนิเมชันเดิมของ Blender ได้ทั้งหมดก็เป็นข้อดีด้วย
VSE ต้องการการดูแลอีกมาก อยากใช้เครื่องมือโอเพนซอร์สทั้งหมดสำหรับพอดแคสต์ แต่พอเรนเดอร์ซีเควนซ์ mp4 ที่มีโครมาคีย์ใน Blender แล้ว วิดีโอ 1.5 ชั่วโมงใช้เวลา 10 ชั่วโมง
สุดท้ายเลยย้ายไปใช้ DaVinci Resolve รุ่นฟรี
อีกทั้งแม้ในกรณีที่ไม่จำเป็นต้องรีเอนโค้ด ก็ยังข้ามไปไม่ได้แบบ DaVinci Resolve และต้องเรนเดอร์ทุกเฟรมทีละเฟรมทั้งหมด ถ้าจุดนี้ดีขึ้นก็น่าจะช่วยเรื่องประสิทธิภาพและความคุ้มค่าของ Blender ได้มาก
ก่อนหน้านี้เคยลองปลั๊กอิน [1] ที่เริ่มงานเรนเดอร์หลายงานจากหลายจุดบนไทม์ไลน์เป็นโปรเซสแยกกัน และมันช่วยให้เรนเดอร์เร็วขึ้นมาก
ตอนนี้ก็ย้ายไปใช้ Resolve บน Linux แล้ว เพราะใช้กล้อง Blackmagic อยู่ เลยเข้าทางนั้นมากกว่า
[1] https://github.com/AkBKukU/blenderSubprocessRender
ตอนนี้กำลังทำเวอร์ชันใหม่ใน Final Cut Pro
การทำให้ส่วนไหนก็ตามของโปรแกรม Blender 3D เร็วขึ้นน่าจะค่อนข้างยากอยู่แล้ว มันเป็นแอป 3D ที่เปิดได้เร็วที่สุดแบบทิ้งห่าง และการตอบสนองของ GUI ก็เร็วที่สุดด้วย
Houdini มาเป็นอันดับ 2 ก็จริง แต่ไม่ได้ใกล้กันเลย
เมื่อหลายปีก่อนเคยไปยุ่งกับโค้ดตัวสร้าง ‘blobby’ แล้วเพิ่มมัลติเธรดเข้าไปจนมันช้าลงมาก พอข้ามต้นทุน overhead ของมัลติเธรดไปได้แล้วมันก็เร็วขึ้นจริง แต่เท่าที่จำได้มันแทบไม่ครอบคลุมกรณีใช้งานทั่วไป เลยเลิกไป และก็น่าจะมีความผิดพลาดของตัวเองอยู่บ้างแน่นอน
ตัวอย่างเช่น การเพนต์เท็กซ์เจอร์ มีลักษณะเหมือนอ้างอิงพอยน์เตอร์ทางอ้อมประมาณ 3 ครั้งต่อพิกเซล และบนพีซีของฉันก็กระตุกพอสมควร
มีประโยคว่า “รู้ไหมว่า Blender มีชุดเครื่องมือตัดต่อวิดีโอด้วย? ผมก็ไม่รู้เหมือนกัน :)” แต่คิดว่าคนส่วนใหญ่ที่ทำแอนิเมชันด้วย Blender น่าจะรู้
เพราะมันเป็นวิธีพื้นฐานในการทำให้เฟรมที่เรนเดอร์แล้วกลายเป็นไฟล์วิดีโอ
จะใช้ compositor เพื่อเปลี่ยนลำดับเฟรมที่เรนเดอร์ไว้ล่วงหน้าให้เป็นไฟล์วิดีโอก็ได้
แต่โดยมากคนคงชอบตัดต่อวิดีโอในโปรแกรมอื่นอย่าง Resolve มากกว่า และ VSE ก็ดูเหมือนอยู่ในขอบเขตแคบๆ แบบ “ต้องการแค่ตัดพื้นฐาน แต่ไม่ต้องการการแปลง, ชื่อเรื่อง, หรือเอฟเฟ็กต์” เลยทำให้ไม่ค่อยมีคนใช้
อยากให้มีคนพัฒนาส่วนการแปลงและเอฟเฟ็กต์ต่อไป และสักวันเพิ่ม การตัดต่อแบบ 3 จุด เข้ามาด้วย
อ้อ Aras นี่เอง เขาเก่งมาก เก่งจริงๆ ฉันจำได้ว่าชื่อเต็มคือ The Amazing Aras
เขาโดดเด่นมากในเรื่องการเขียนโค้ดกราฟิกส์และด้านอื่นๆ และดูเหมือนจะมี ภาวะลื่นไหลในการทำงาน ที่ดีมากเวลาเขียนโค้ดด้วย
งานเขียนของเขาอ่านง่ายและสนุก ให้ความรู้สึกเหมือนกำลังฟังเจ้าตัวพูดอยู่ ประโยคอย่าง “However!” ตรงกลางก็เป็นแบบนั้น
ตอนท้ายที่พูดว่าถ้าต้องถูกกดทับด้วยความคาดหวังเรื่องวัฒนธรรมและกระบวนการมาตรฐานของบริษัททั่วไป ผลิตภาพจะเหลือแค่ 30% ก็โดนใจมาก ต้นทุนของการผูกพนักงานไว้กับ “งานของตัวเอง” นั้นมีการลดลงของผลิตภาพอย่างมหาศาลรวมอยู่จริงๆ
หวังว่าเมื่อเห็นกรณีแบบนี้เรื่อยๆ วิศวกรจะเรียนรู้วิธีจัดระเบียบผู้คนและกิจกรรมให้ดีขึ้น เชื่อในสิ่งที่เรียนรู้นั้น และเริ่มผสาน ผลิตภาพสูง/ภาวะจดจ่อสูง เข้ากับวิธีจัดองค์กรจริงๆ
อย่างที่บทความสื่อไว้ ถ้าทำได้ งานในอุตสาหกรรมเทคโนโลยีก็น่าจะสนุกขึ้น อาจจะเกือบสนุกพอๆ กับการเล่นกับเทคโนโลยีเลยก็ได้
ขอกล่าวเสริมเกี่ยวกับ https://projects.blender.org/blender/blender/pulls/116089 ว่า
inlineส่งผลกับ กฎการนิยามเพียงหนึ่งเดียว เป็นอันดับแรกพูดง่ายๆ คือถ้านิยามฟังก์ชันไว้ใน header แล้วเรียกจากหลายไฟล์
.ccก็จะเกิด linker error เว้นแต่จะทำเครื่องหมายเป็นinlineส่วนผลต่อการทำ inline optimization จริงนั้นมีได้ตั้งแต่ “ไม่มีเลย” ไปจนถึง “คอมไพเลอร์อาจให้น้ำหนักต่างกันเพราะวิธีการลิงก์” หรือ “ยอมรับเป็นคำใบ้จริงๆ” และใน link-time optimization ก็มีข้อพิจารณาคล้ายกัน
ถ้าต้องการส่งสัญญาณเรื่องการอินไลน์ให้แรงกว่านี้กับคอมไพเลอร์ โดยเฉพาะกับฟังก์ชันที่ใช้เฉพาะในไฟล์ที่นิยามมันไว้ การนิยามไว้ใน anonymous namespace จะดีกว่า
เจตนาเดิมของการใส่
inlineให้ฟังก์ชันนั้นอาจเป็นความพยายามที่จะให้เกิดการอินไลน์จริง แม้ประโยชน์ที่วัดได้จะไม่ชัดเจน แต่ก็ไม่ใช่ว่าจะเป็นไปไม่ได้