By Arnon Puitrakul - 07 กุมภาพันธ์ 2022
เราเป็นคนนึงที่ใช้งาน OBS เยอะมาก ๆ ใช้อัดพวก Course สอนต่าง ๆ เพราะ Feature ของมันตอบโจทย์การใช้งานมาก ๆ รองรับพวก Capture Card และ Element หลาย ๆ อย่างที่เราใช้ เรียกได้ว่าเป็นโปรแกรมที่ใครทำ Live น่าจะต้องผ่านการใช้งานกันมาไม่มากก็น้อยเลย แต่มันมีปัญหากับ Macbook Pro 14-inch M1 Max ของเรามาก ๆ จนเราไปเจอ RC Build สำหรับ Apple Silicon ลองไปดูกันว่ามันจะเป็นอย่างไร
ปล. ตัว Version นี้ ไม่แนะนำสำหรับการเอาไปใช้งานจริงนะ เพราะยังไม่ได้เป็น Release จริง ๆ ออกมา อาจจะมีข้อผิดพลาดอะไรบางอย่างได้ ถ้าเอาไปใช้งานจริง อาจจะต้องรอ Release จริง ๆ ในรอบหน้า น่าจะมาแล้วละ
จุดเริ่มต้น ของปัญหาที่เราเจอคือ เราจะต้องอัดกล้อง กับพวกหน้าจอ สำหรับการสอนนี่ละ โดยเราจะอัดที่ความละเอียด 4K บน Bitrate 200 Mbps เพราะเราอยากจะให้ได้คุณภาพสูงสุด ก่อนที่เราจะไปบีบเพื่อ Publish อีกรอบ ซึ่งแน่นอนว่าบน OBS ก็รองรับ Hardware Encoder เป็นที่เรียบร้อยแล้ว ถ้าเราเลือก Output Mode เป็น Advance บน Encoder จะมี Apple VT H264 Hardware Encoder มันเป็นตัว Encoder ที่ทำให้เราสามารถใช้ GPU หรือ Media Engine บน M1 Pro และ Max ในการ Encode Video ได้
นั่นหมายความว่า มันจะไปลดโหลดของ CPU ลงทำให้เราสามารถเอา Headroom ที่เหลือในการทำงานอื่นได้ เช่น เราก็ใช้ในการสอน และรันโปรแกรมที่สอนอะไรพวกนั้น ซึ่งแน่นอนว่า เราก็ต้องใช้เยอะพอสมควรเหมือนกัน เพราะเป็นการสอนเขียนโปรแกรมเนอะ ไหนจะพวกโปรแกรมสำหรับ Mix เสียงอะไรอีก มันก็กินอยู่พอตัว
แต่ ๆ พอเราเลือก Hardware Encoder กดอัดเท่านั้นแหละ มันเด้งเลยว่า Encoder Overloaded ถ้าใครที่เจอแบบนี้คือ อย่า หา ทำ อัดต่อเลยนะ เพราะ ไฟล์ที่เราได้ มันจะมีอาการ Drop Frame รัว ๆ เลย ทำให้เราต้องเสียเวลาอัดใหม่อีก ไม่โอเคเลย
ทำให้ ถ้าเราต้องการอัด 4K 200 Mbps เราเลยจะต้องเลือก x264 Encoder ที่เป็น Software Encoder ที่กิน CPU อยู่พอสมควร เราลองเลือก Preset เป็น Faster ที่เราก็ไม่ค่อยโอเคแล้ว ยังไม่รอดเลย เราต้องกดลงไปใช้ Ultrafast ที่เราไม่โอเคมาก ๆ เพราะคุณภาพ เราไม่ชอบเลย อัดออกมา คือเห็นเลยว่าคุณภาพมันไม่ได้เท่าไหร่ แต่ถ้าไม่ทำแบบนั้น เราก็จะอัดไม่ได้ ก็เลยต้องยอมก็ได้
แต่เราก็สงสัยนะว่า เห้ย เครื่องระดับ M1 Max ที่มันมี Media Engine แรงขนาดนั้น ทำไมกะอีแค่การ Encode 4K แค่ 30 FPS เท่านั้น ทำไมมันไม่รอดหว่า เราเก็เลยไปลอง Vary Settings หลาย ๆ ตัว ก็ยังไม่ได้สักที
จนเรามาดูใน Activity Monitor เอ๊ะ มันยังเป็น x86 Arch อยู่นิหว่า มันต้องรันผ่าน Rosetta นิหว่า หรือว่า ที่มันแตกนี่ เป็นเพราะมันต้องวิ่งผ่าน Rosetta มันอาจจะทำให้มันเข้าถึงพวก Hardware Encoder อะไรได้แย่กว่าหรือเปล่า ไม่รู้นะมั่ว ตอนที่หาเรื่องนี้คุ้น ๆ ว่ามันมีคนเปิดเรื่องนี้ใน OBS Project นิหว่า เลยเปิดเข้าไปดูใน Github เจอเลย เออ ลอง ๆ
สำหรับคนที่ยังไม่ทราบ คือ OBS เป็น Open-Source Software ทำให้ตัว Source Code ต่าง ๆ มันจะถูก Host อยู่บน Github ให้เราสามารถเข้าไปช่วยกันเขียนได้เลย พวก Release Version ต่าง ๆ ก็จะอยู่ในนั้นหมดเลย
ถ้าเราอยากได้พวก Pre-Realease Version ต่าง ๆ ก็สามารถหาได้จาก Github ของเขาได้เลย โดยปกติ ถ้าเราจะเข้าไปโหลดพวก Pre-Release ต่าง ๆ เราก็สามารถกดเข้าไปที่ Release แล้วกดโหลด Version ล่าสุดได้เลย แต่ถ้าเราเข้าไปดู เราจะเห็นว่า มีแต่ Installer ของ macOS ซึ่งเป็น x86 ปกติเลย เขายังไม่ได้เพิ่มส่วนของ ARM เข้ามา แต่เราจะบอกว่า จริง ๆ แล้ว เขาเริ่ม Build Project ออกมาเป็น ARM64 ที่ใช้บน Apple Silicon สักพักแล้ว
เราสามารถเข้าไปโหลดตัว Binary ที่เป็น ARM64 สำหรับ Apple Silicon ผ่านพวก Build Artifact ได้เลย แต่ย้ำนะว่า มันยังเป็น Pre-Release มันอาจจะมีข้อผิดพลาดอะไรบางอย่างอยู่ก็ได้นะ ดังนั้น ใช้ความระมัดระวังในการใช้งานหน่อย
โดยปกติ ถ้าเราใช้ macOS เราเปิด Image ที่โหลดมาขึ้น แล้วเราก็ Copy ใส่ใน Application Folder ได้เลย แต่อันนี้ เราอยากจะให้แยก Version ออกมาหน่อย เผื่อมันมีอะไรขึ้นมา เราจะได้ Fallback กลับไปใช้ตัวเดิมได้ ให้เราก๊อปออกมาไว้สักที่ก่อนแล้วเปลี่ยนชื่อ เช่น OBS-ARM64 อะไรก็ว่าไป เพื่อให้เรารู้ว่าอันไหนเป็น Pre-Release แล้วค่อย Copy เข้า Application Folder พอจะใช้ ก็ทำให้เราสามารถเลือกได้เลยว่า เราจะใช้ตัวไหน
เราลองโหลดมาใช้งานดู ส่วนตัวเรา ไม่มีปัญหาอะไรเลยนะ ทุก Function ที่เราใช้ก็ทำงานได้แบบไม่มีข้อผิดพลาดอะไรเลย แต่สิ่งที่ทำให้ทึ่งมาก ๆ คือ Performance ของมัน ที่ก่อนหน้านี้เราอัดโดยใช้ Hardware Encoder ไม่ได้เลย แต่ตอนนี้ เราใช้ Config เดิมเป๊ะ ๆ ในการอัด ปรากฏว่า CPU และ GPU แทบไม่ทำงานกับ OBS เลย แต่ Encoder ก็ไม่ Overload ด้วย คือ อัดแบบใช้งานได้เลยละ
ทำให้เราอัด Course ได้สบายตัวขึ้นมาก พอ CPU มันกินน้อยส่วนนึงคือประหยัดไฟกว่าเดิมแหละ อะไม่เท่าไหร่หรอก แต่ก็ประหยัดขึ้นแน่ ๆ แต่ ๆ ที่ดีเลยคือ พัดลมแทบไม่วิ่งเลย จากเดิมที่วิ่งจนจะบินได้อยู่แล้ว ลดเสียงรบกวนที่เข้าไมค์ได้เลย ดี ยอดเยี่ยมมาก
เรายังลองกับ 4K 60 FPS ก็ยังไม่มีปัญหาเลย มันก็ยังทำงานได้เป็นปกติไม่อะไรทั้งนั้น ทำให้เราคิดแล้วว่า หรือที่ Version ก่อนมันรองรับ Hardware Encoder มันอาจจะติดเงื่อนไขอะไรบางอย่างทำให้มันดึง Performance ของ Media Engine ได้อย่างเต็มที่กัน เลยทำให้เราเจอปัญหาเหมือนที่เราเล่า
ก่อนหน้านี้เราแค่อัด อันนี้เราลอง Stream ออกไปเลย โดยใช้ 4K เหมือนเดิมเป็นความละเอียดเริ่มต้น แล้วค่อย Downscale ลงไปเป็น 1080p แล้วค่อยยิงออกไปให้ Facebook ปรากฏว่า เห้ยยยยย คุณภาพใช้ได้เลยนะเอาจริง ๆ มันไม่แย่เลยนะ เมื่อก่อน เราลอง x264 ที่เป็น Software Encoder ออกไป คุณภาพที่เราสามารถเซ็ตกับเครื่องนี้ได้มันไม่ได้เท่านี้แน่ ๆ อันนี้ดีกว่าเยอะมาก ๆ
อดใจรอ Release หน้าของ OBS ไม่ไหวแล้ว มันช่วยทำให้เราสามารถอัดหน้าจอได้ที่ คุณภาพ สูงขึ้นมาก ๆ แต่มันกิน Resource ต่าง ๆ เราน้อยลงมาก ๆ จนน่าตกใจเลย โดยรวม เราว่า มัน Efficience กว่าพวก NEVC ของ Nvidia เยอะมาก ๆ กินไฟต่างกันลิบ ๆ เลยละมั้งนะ กับให้พวกเรื่องของความร้อนก็น่าจะต่างเหมือนกัน ทำให้เราว่า Hardware Encoder ระดับนี้ เอาจริง ๆ ใช้งานในระดับ Professional ในการทำพวก Boardcasting ได้เลยนะ รับยัน 4K 60FPS ขนาดนั้น
เคยสงสัยกันมั้ยว่า Filter ที่เราใช้เบลอภาพ ไม่ว่าจะเพื่อความสวยงาม หรืออะไรก็ตาม แท้จริงแล้ว มันทำงานอย่างไร วันนี้เราจะพาไปดูคณิตศาสตร์และเทคนิคเบื้องหลังกันว่า กว่าที่รูปภาพจะถูกเบลอได้ มันเกิดจากอะไร...
หลังจากดูงาน Google I/O 2024 ที่ผ่านมา เรามาสะดุดเรื่องของการใส่ Watermark ลงไปใน Content ที่ Generate จาก AI วันนี้เราจะมาเล่าให้อ่านกันว่า วิธีการทำ Watermark ใน Content ทำอย่างไร...
ก่อนหน้านี้เราทำ Content เล่าความแตกต่างระหว่าง CPU, GPU และ NPU ทำให้เราเกิดคำถามขึ้นมาว่า เอาเข้าจริง เราจำเป็นต้องมี NPU อยู่ในตลาดจริง ๆ รึเปล่า หรือมันอาจจะเป็นแค่ Hardware ตัวนึงที่เข้ามาแล้วก็จากไปเท่านั้น วันนี้เราจะมาเล่าให้อ่านกัน...
บทความนี้ เราเขียนสำหรับมือใหม่ หรือคนที่ไม่ได้เรียนด้านนี้แต่อยากรู้ละกัน สำหรับวันนี้เรามาพูดถึงคำที่ถ้าเราทำงานกับพวก Developer เขาคุยกันบ่อย ๆ ใช้งานกันเยอะ ๆ อย่าง Database กันว่า มันคืออะไร ทำไมเราต้องใช้ และ เราจะมีตัวเลือกอะไรในการใช้งานบ้าง...