BLOG

Proxy Workflow ใน Adobe Premiere Pro

ถ้าหากว่าคุณต้องทำงานกับไฟล์ MP4 ความละเอียด 4K ผมมีวิธีกับโปรแรกมที่จะมาช่วยให้คุณ Scrub timeline ได้ลื่นขึ้นครับ

สำหรับท่านที่ใช้งานกล้อง Mirrorless, DSLR หรือ Compact กลุ่ม Pro-sumer (Sony RX100, Panasonic LX100)  ซึ่งปัจจุบันสามารถถ่ายได้วิดีโอได้ดีมาก แถมยังได้ไฟล์ที่ความละเอียดระดับ 4K เป็นไฟล์ MP4 ที่บัีบอีัดข้อมูลภาพแบบ H.264 ซึ่งเรียกว่าเกือบจะพร้อมใช้งานอีกต่างหาก เปิดเครื่องไหนก็เปิดได้แน่นอน

แต่ว่าปัญหาของไฟล์ H.264 ก็คือว่า มันถูกออกแบบมาเพื่อให้สามารถบีบอิัดข้อมูลได้อย่างดีมาก เรียกได้ว่า ดีเกินไปเลยละ พอเราเอามาวางลงใน Timeline แล้วลอง Scrub เล่นดู ก็จะเจอสภาพนี้

ทั้งที่ ผมผมก็ได้เปิด Hardware Acceleration ไว้สำหรับเวลา Decode แล้วด้วยนะ :'(

จากที่ผมได้ศึกษาเพิ่มเติมก็คือ อ็อปชั่นนี้ ต่อให้เครื่องเราไม่รองรับ "Hardware accelerated decoding" ก็ตาม มันก็ยังจะสามารถกาเครื่องหมายถูกไว้ได้อยู่ดีครับ แต่ว่ามันจะไม่ได้ใช้งาน (ปวดหัวกับคนทำ UX จริงๆ) จากในภาพข้างต้นจะเห็นว่า CPU Usage ของผมนั้น ขึ้นไปถึง 60% เลยทีเดียว และดูจากความเร็ว CPU ก็คงพอจะเดาได้ว่าผมใช้ AMD Ryzen อยู่ครับ เป็นรุ่น 1700x ซึ่งถ้าผมไม่ลืม ก็จะเปิด Ryzen Master เพื่อโอเวอร์คล็อคมันไปที่ 3.9GHz ทุกครั้ง สำหรับการใช้ 60% นี่ก็หมายถึงว่า มันถูกใช้อยู่ 8-9 Thread จากที่มีทั้งหมด 16 Thread เลยทีเดียวแล้วนะ

ส่วนสาเหตุที่ตัว Premiere นั้นไม่ยอมใช้ NVENC บน GTX1080 ของผมนั้น (คือ อุตส่าห์ลงทุนซื้อมา เพื่อจะเล่นเกม + จะใช้ด้วยเนี่ย #อ้าง) จากที่หาอ่านมาหลายที่แล้ว ก็พบว่า ตัว Hardware Accelerated Decoding ที่มีใน Premiere Pro 2018 นั้น จะรองรับเฉพาะ Intel QuickSync ครับ และเป็นสาเหตุที่ LEVEL51 ไม่มี Ryzen และการ์ดจอ AMD ให้เลือกเลย เนื่องจากว่ากลุ่มลูกค้าของเราจะไม่สามารถใช้งานความสามารถของ Ryzen/Radeon ได้เลย เพราะว่า Premire Pro ใช้ CUDA กับ QuickSync เนี่ยแหละ และตัว Render 3D ที่เป็น GPU Renderer ส่วนมากตอนนี้ ก็จะมักจะใช้ CUDA เป็นหลักอีกต่างหาก พูดง่ายๆ ก็คือผมลองแล้วมันไม่เวิร์คนั่นแหละ เลยไม่ได้เอามาให้เลือกใช้ ;)

ส่วนท่านที่ใช้ Intel CPU ที่มี QuickSync (รุ่น 6th Generation ขึ้นไป) + การ์ดจอ NVIDIA ในเครื่องคอมพิวเตอร์ PC จะต้องทำการเปิดใช้ตัว Intel GPU ด้วยนะจึงจะสามารถใช้งานได้ เดี๋ยวว่างๆ กำลังจะรื้อ Ryzen ออก แล้วใส่ 8700K แทนแล้ว ถ้าสามารถทำสำเร็จจะเอาวิธีมาฝากกันอีกรอบนะ

(แถมสั้นๆ) ทำไมการถอดรหัส H.264 ถึงช้า

เป็นเพราะว่า ข้อมูลภาพของ H.264 นี่ มันไม่ได้เก็บข้อมูลภาพทั้งหมดภาพเป็นภาพนะ (ในขณะที่ไฟล์ MJPEG จากกล้องวงจรปิด หรือไฟล์ GIF คือภาพทั้งภาพวางเรียงต่อๆ กันมา) แต่ว่ามันจะทำการแบ่งภาพทั้งภาพเป็นบล็อกๆ แล้วมาคำนวณว่าแต่ละบล็อก มันจะขยับไปอย่างไรบ้างใน Frame ต่อไป แล้วเก็บแต่ข้อมูลการขยับของบล็อกนั้น ถ้าเราลองดูไฟล์ H.264 ที่ไฟล์ขนาดเล็กมากๆ หรือ Bitrate ต่ำมาก แทบจะเห็นเลยว่า บล็อกนี้มันเลื่อนไปมาได้

Block partition.jpg
By VC Demo, itu delft - VC Demo, CC BY 2.5, Link

โดยภาพที่เป็นภาพสมบูรณ์ทั้งภาพ จะเป็น I Frame ซึ่งปกติแล้ว ทุก 1 - 5 วินาที ถึงจะมี 1 ภาพ (Keyframe) โดยภาพที่เหลือทั้งหมด จะเป็น B กับ P Frame คือภาพที่ถูกจำลองขึ้นมา ซึ่งจะมีแต่ข้อมูลการขยับของบล็อกเมื่อเทียบระหว่างเฟรมปัจจบุัน กับ I Frame ย้อนไปที่ใกล้ที่สุด ดังนั้น เวลาที่เราต้องการภาพ ที่เป็น B หรือ P Frame มันก็จะต้องย้อนไปดูภาพ I ที่ใกล้ที่สุด แล้วก็ไล่สร้างมาทีละภาพๆ จนมาถึง Frame ที่เราต้องการไง

สมมุติว่าถ้ากล้องอัดมาเป็น 1 I Frame ทุกๆ วินาที (Keyframe 1 วินาที) และ 1 วินาทีมี 30 ภาพ ทุกๆ ภาพที่เราต้องการจะแสดง มันก็จะต้องประมวลผลทั้งหมดประมาณ 15 Frame ก่อนจะได้ภาพที่เราต้องการ และจะนรกมาก เวลาที่เราเพิ่มความเร็วของ Clip (ยิ่งต้องประมวลเยอะขึ้น) หรือว่าทำการเล่นย้อนหลัง เป็นสาเหตุที่ทำให้มีหลายคนบอกว่าไฟล์ H.264 ไม่เหมาะที่จะเอามาใช้ตัดต่อไง แต่ถ้าไฟล์ที่เป็นไฟล์ที่ออกแบบสำหรับตัดต่อ (เช่น ProRes, GoPro Cineform) ก็จะมีข้อมูลภาพเรียงกันมาทุก Frame ทำให้โปรแกรมตัดต่อ สามารถดึงภาพนั้นออกมาได้เลย

ส่วนกล้องบางรุ่น มีโหมดให้บันทึกแบบ I-Frame Only แบบนี้ก็คือกล้องจะบันทึกแต่ภาพเต็ม คือเหมือนได้ไฟล์ MJPEG แต่ว่าเป็นรูปแบบ H.264 ออกมา ก็จะได้ไฟล์ H.264 ที่เป็น MP4 เหมือนกัน แต่ว่าขนาดใหญ่กว่ามากเลย

IBBPBB inter frame group of pictures

การสร้าง Proxy

ในเมื่อเราจะต้องทนใช้ CPU Decode กันต่อ การที่จะมาทนทุกข์กับ Preview ที่โคตรกระตุก หรือว่าจะต้องรอ Render ก่อนทุกครั้งเพื่อดู Preview งานคงจะไม่เสร็จแน่ๆ วิธีการแก้ไขคือ ในเมื่อรู้แล้วว่ามัน Decode ไฟล์ MP4 ขนาด 4K ไม่ไหว เราก็จะต้องลดขนาดมันลงหน่อย เป็นไฟล์ที่ Decode ได้ไวขึ้น เพื่อให้เราสามารถ Preview ได้โดยไม่กระตุกครับ ก็ไฟล์แบบนี้เรียกว่า Proxy 

สำหรับ Premiere Pro 2017 เป็นตั้นมา จะมีระบบที่เรียกว่า Proxy Workflow ให้เราสามารถใช้งานได้โดยง่ายขึ้นมากแล้ว ในเวอร์ชั่นก่อนหน้านี้เราจะใช้วิธี 'Hack' โดยสร้างไฟล์ Proxy ขึ้นมา วางไว้อีก Folder หนึ่ง แล้ว Rename Folder หรือใช้ Symbolic Link สลับ Folder เอา แล้วเปิด/ปิด Premiere เวลาต้องการใช้ Proxy หรือใช้ไฟล์ต้นฉบับ สมมุติว่าจะใช้ Proxy ก็ไป Rename Folder จาก D:\Footage_proxy เป็น D:\Footage พอจะใช้ต้นฉบับ ก็ไปเปลี่ยนจาก D:\Footage กลับเป็น D:\Footage_proxy แล้วไปเปลี่ยน D:\Footage_original เป็น D:\Footage อีกที ประมาณนั้น ลำบากเนาะ!!!

ส่วนวิธีใช้ Proxy Workflow ก็เริ่มจาก สร้างไฟล์ Proxy ครับ ซึ่ง Premiere Pro จะสามารถใช้ Adobe Media Encoder ในการสร้างให้เราได้เลย ก็คลิกขวาที่ไฟล์ที่เราต้องการ (เลือกทุกไฟล์เลยได้) แล้วเลือก Proxy แล้วก็กด OK สร้างได้เลย ตามวีอีโอนึี้

สำหรับตัวเลือกว่า ต้องการไฟล์แบบไหน จะมีสองแบบคือ

  • QuickTime ก็คือไฟล์ .MOV ซึ่งจะใช้ Codec GoPro Cineform ที่ใช้ Hardware Decoding ด้วย CUDA 
  • H.264 ก็คือไฟล์ .MP4 ธรรมดา

จะเลือกตัวไหนก็ได้ครับ แต่ถ้าต้องการประหยัดที่ H.264 จะเล็กกว่า ส่วนไฟล์ Cineform จะสามารถ Decode ได้ง่ายกว่า สำหรับ CPU ที่ไม่แรงมาก แต่ว่าถ้าไฟล์จากกล้องมาเป็น .MOV ที่ข้างในเป็น GoPro Cineform หรือ ProRes อยู่แล้ว ส่วนมากจากไม่ต้องทำ Proxy นะ เพราะว่าทั้งสอง Codec นี้ สามารถใช้ CUDA Decode ได้ และนอกจากนี้มันเป็น Codec ที่ออกแบบมาสำหรับการตัดต่อยู่แล้ว มันจะ Decode ได้เร็วอยู่แล้วครับ

แล้วเพื่อให้การทำงานกับ Proxy สะดวกขึ้น เราควรไปตั้งค่าให้หน้าจอ Project ให้แสดง คอลัมน์เพิ่มด้วย เพื่อจะได้เช็คได้ว่าตกลง Proxy ถูกใช้อยู่หรือเปล่า (Column Proxy สามารถย้ายมาข้างหน้าเลยได้นะ)

การใช้งาน Proxy

พอเราสร้างไฟล์ Proxy แล้ว ที่เหลือก็คือแค่เปิดใช้งานครับ ปกติถ้ามัน Attach แล้วก็มันจะถูกใช้งานเลย แต่บางทีเราก็อาจจะต้องอยากเช็คบางว่า กับไฟล์ต้นฉบับมันเป็นอย่างไร ปุ่มสำหรับสลับนั้นก็มีอยู่แล้ว แต่ว่ามันถูกซ่อนไว้ ถ้าจะนำมันกลับมา ก็เพียงแค่กดปุ่มรูป + ข้างใต้หน้าจอ Preview แล้วลากมันออกมา และก็ในวีดีโอจะเห็นว่า จากใน Timeline ที่แทบไม่กระดิกเลย พอเปิดใช้ Proxy แล้ว ก็ Scrub ได้ลื่นเลยทีเดียว

ส่วนเวลา Export เราไม่ต้องกดปิด Proxy นะ ตัว Premiere จะรู้อยู่แล้วว่าต้องใช้ไฟล์ต้นฉบับครับ

แล้วทีนี้ จะต้องมานั่ง Create Proxy ทุกครั้งเลยเหรอ มันไม่สะดวกเลยว่ามั๊ย? ผมก็เลยทำโปรแกรมขึ้นมาอีกแล้ว!

สร้าง Proxy อัตโนมัติด้วย LEVEL51 AutoProxy

เป็นโปรแกรมเล็กๆ ที่ผมเขียนขึ้นมาใช้เองครับ เอามาแจกให้ทุกท่านได้ใช้กันด้วย โดยโปรแกรมนี้จะคอยส่องดู Folder ที่เลือก ทุกๆ 1 นาที แล้วก็จะทำการสร้างไฟล์ Proxy ให้ โดยใช้ Hardware Decoder + Hardware Encoder ได้เท่าที่มีในเครื่อง สามารถเปิดทิ้งไว้ได้เลย พอเอาไฟล์วางลงไปใน Folder ที่เลือกไว้ (คลิกขวาที่ Icon ของโปรแกรม แล้วเลือก Add Folder) มันก็จะทะยอย Encode ให้เเองโดยอัติโนมัติครับ ส่วนถ้าอยากจะให้มันทำงานตอนนั้นเลย ก็เลือก "Process Now" มันก็จะรันทันที

โปรแกรมนี้ใช้ ffmpeg ในการ Transcode นะ ตัวโปรแกรมจะ Download Version ปัจจุบันจากเว็บ https://ffmpeg.zeranoe.com/builds/ ให้เอง ตอนที่มันจะทำการ Encode ในครั้งแรกครับ

วิธีการติดตั้งและใช้งาน

  1. เปิดลิงค์ http://bit.ly/lv51-autoproxy ด้วย Microsoft Edge แล้วเลือก Open (หรือ Chrome ก็ได้ แต่ถ้าใช้ Chrome มันจะดาวน์โหลดไฟล์มา ก็แค่เปิดขึ้นมาด้วยอีกรอบ)
  2. กดปุ่ม Install
  3. More Info...
  4. Run Anyway

โปรแกรมจะแสดงเป็นไอคอนใน Tray ก็คลิกขวา Add Folder แล้วก็รอได้เลย

ตัวโปรแกรมจะสร้าง Folder ชื่อ Proxies ขึ้นมาแล้วก็ตั้งชื่อไฟล์ในลักษณะเดียวกับที่ Adobe Premiere Pro สั่งให้ Adobe Media Encoder สร้างขึ้น เวลาที่เราจะเอาไฟล์ Proxy พวกนี้นี้มาใช้งาน ก็เพียงแค่เลือก Attach แล้ว Premiere Pro มันแทบจะหาเจอเองเลยโดยอัตโนมัติเลย

จริงๆ แล้วเราสามารถใช้ Adobe Media Encoder ทำการ Transcode ให้อัตโนมัติก็ได้ แต่ว่า ตัว Adobe Media Encoder ไม่ยอมใช้ Hardware Decoder แล้วก็ไม่ยอมใช้ Hardware Encoder ด้วย (ในเครื่องผมอะนะ) เวลาเอาไฟล์วางลงไป มันเลยจะกิน CPU มากครัับ ทำอย่างอื่นไม่ได้เลย แต่ว่าตัว LEVEL51 AutoProxy ผมได้เขียนคำสั่ง ffmpeg ให้ใช้ Hardware Encoder + Hardware Decoder เรียบร้อยแล้ว

(สำหรับ Hardware Decoder ตอนนี้ใช้ได้เฉพาะกับการ์ดจอ Nvidia นะ และมันก็ Hard Code ไว้ว่าจะใช่้แค่การ์ดจอตัวแรกเท่านั้น ถ้าใส่มากกว่า 1 ตัว มันจะไม่ได้ใช้ครับ เดี๋ยวถ้าได้ฤกษ์เอา 8700K มาใช้แล้ว จะแก้โปรแกรม ให้มันใช้ทั้ง QuickSync แล้วก็ GTX พร้อมกัน เพื่อประมวลผลหลายไฟล์พร้อมกันได้อีกที)

ส่งท้าย

เช่นเคย ก็หวังว่าโพสนี้จะมีประโยชน์ และโปรแกรม AutoProxy ของผมก็คงจะมีประโยชน์ด้วยเหมือนกันนะครับ ไว้เจอกันอีกทีโพสหน้านะ

โน๊ตบุ้ค/พีซี จาก LEVEL51

อ่านบทความแล้ว ถ้าสนใจเครื่องของเรา นี่คือเครื่องโน๊ตบุ้ค ที่เลือกเสปคเองได้ของเรา

BLOG