2 คะแนน โดย GN⁺ 2023-12-13 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

FFmpeg CLI รองรับมัลติเธรดดิ้ง

  • ฟีเจอร์ที่ทำให้ส่วนติดต่อบรรทัดคำสั่ง (CLI) ของ FFmpeg รองรับมัลติเธรดดิ้ง ได้ถูกรวมเข้ากับ FFmpeg Git แล้ว
  • นี่เป็นการเปลี่ยนแปลงที่เกิดขึ้นก่อนการเปิดตัว FFmpeg 7.0 ในช่วงต้นปีหน้า และถือเป็นการปรับปรุงครั้งใหญ่สำหรับโครงการโอเพนซอร์สสำคัญที่ถูกใช้อย่างแพร่หลายในการแปลงรหัสวิดีโอ
  • ในยุคที่โปรเซสเซอร์หลายคอร์กลายเป็นเรื่องปกติ การปรับปรุงนี้มีประโยชน์อย่างมาก

งานรีแฟกเตอร์ที่ซับซ้อน

  • ในการประกาศทางเทคนิคล่าสุด นักพัฒนา FFmpeg อธิบายงานมัลติเธรดดิ้งนี้ว่าเป็น "หนึ่งในการรีแฟกเตอร์ที่ซับซ้อนที่สุดที่เกิดขึ้นกับ FFmpeg CLI ในรอบหลายทศวรรษ"
  • นักพัฒนาได้ขอให้ผู้ใช้ช่วยทดสอบ และเรียกร้องให้รายงานปัญหาที่พบไปยัง FFmpeg Trac

การเปลี่ยนแปลงทางเทคนิคที่นำมาใช้

  • แพตช์ที่ถูกรวมเข้าไปมีทั้งการเพิ่มโครงสร้างพื้นฐานสำหรับการจัดตารางทรานส์โค้ดที่รับรู้เธรด การย้ายการเข้ารหัสไปยังเธรดแยกต่างหาก และการเปลี่ยนแปลงระดับล่างอื่น ๆ อีกหลายรายการ
  • การเปลี่ยน FFmpeg ไปสู่สถาปัตยกรรมแบบเธรด หมายความว่าแต่ละองค์ประกอบ (demuxer, decoder, filter, encoder, muxer) ซึ่งเดิมทำงานอยู่บนเธรดแยกกันอยู่แล้ว ตอนนี้จะสามารถทำงานแบบขนานได้จริง

ความเห็นของ GN⁺

  • การรองรับมัลติเธรดดิ้งของ FFmpeg เป็นพัฒนาการสำคัญที่สามารถเพิ่มประสิทธิภาพของงานแปลงรหัสวิดีโอได้อย่างมาก
  • งานรีแฟกเตอร์ที่ซับซ้อนนี้สร้างความท้าทายอย่างมากให้กับนักพัฒนา และแสดงให้เห็นว่า FFmpeg ยังคงปรับตัวและพัฒนาอย่างต่อเนื่องให้เข้ากับสภาพแวดล้อมการประมวลผลสมัยใหม่
  • สำหรับทั้งผู้ใช้และนักพัฒนา การเฝ้าดูว่าการเปลี่ยนแปลงนี้จะส่งผลต่อประสิทธิภาพจริงอย่างไรนับเป็นเรื่องที่น่าสนใจ

1 ความคิดเห็น

 
GN⁺ 2023-12-13
ความคิดเห็นจาก Hacker News
  • ทฤษฎีเกี่ยวกับการเพิ่มประสิทธิภาพมัลติเธรด/มัลติโปรเซสซิง

    • ในอดีต การอ่าน ประมวลผล และเรนเดอร์ภาพหนึ่งภาพใช้เวลาค่อนข้างมาก แต่ด้วยพัฒนาการของฮาร์ดแวร์และเทคโนโลยีซอฟต์แวร์ ตอนนี้จึงทำได้เร็วขึ้นมาก
    • เมื่อก่อน การให้เวิร์กเกอร์หลายตัวช่วยกันประมวลผลหนึ่งเฟรมมีประสิทธิภาพ แต่ปัจจุบันเวิร์กเกอร์ตัวเดียวสามารถประมวลผลเฟรมได้มีประสิทธิภาพมากกว่าการระดมเวิร์กเกอร์หลายตัว
    • ระบบสมัยใหม่มีสภาพแวดล้อมที่แตกต่างโดยสิ้นเชิงจากตอนที่ FFmpeg ถูกสร้างขึ้นครั้งแรก จึงจำเป็นต้องทบทวนวิธีนิยามภาระงาน การจัดตาราง การกระจาย การติดตาม และการนำมารวมเป็นผลลัพธ์สุดท้าย
    • ชื่นชมทีม FFmpeg ที่รับความท้าทายนี้ FFmpeg คือจุดสูงสุดของโครงสร้างพื้นฐานโอเพนซอร์ส และเป็นองค์ประกอบสำคัญที่จำเป็นต่อการสร้างอารยธรรม
  • วิดีโอบันทึกการบรรยายจากงาน VDD@Dublin

    • กำลังมองหาวิดีโอบันทึกการบรรยายอยู่ แต่หาได้ไม่ง่ายทั้งจากเว็บไซต์ของผู้เขียนหรือจากที่นี่
    • อัปเดต: เจอใน YouTube แล้ว!
  • ข้อคิดเกี่ยวกับการเพิ่มประสิทธิภาพแบบมัลติคอร์

    • ปัจจุบันตัวเข้ารหัสใช้หลายเธรดเพื่อประมวลผลเฟรมเดียวกันพร้อมกัน โดยทั่วไปจะแบ่งเฟรมออกเป็นหลายส่วนและให้แต่ละเธรดรับผิดชอบส่วนที่กำหนด
    • อีกทางเลือกหนึ่งคือการประมวลผลเซกเมนต์คีย์เฟรมอย่างอิสระ วิธีนี้สามารถทำให้โค้ดेकขนานการทำงานได้ในแบบที่ทั่วไปและมีประสิทธิภาพ โดยไม่มีการสูญเสียประสิทธิภาพการบีบอัดจากการแบ่งเฟรมเป็นส่วน ๆ หรือโอเวอร์เฮดจากการสื่อสารระหว่างเธรด
    • ปัญหาของวิธีนี้คือ ต้องโหลดเฟรมจำนวน N*คาบคีย์เฟรมไว้ในหน่วยความจำ และมีโอเวอร์เฮดหน่วยความจำเพิ่มเติมที่จำเป็นต่อการเข้ารหัส N เฟรม
    • อย่างไรก็ตาม ในหลายกรณี ข้อเสียเหล่านี้อาจไม่ใช่ปัญหาใหญ่ คนส่วนใหญ่มักยอมรับการใช้ RAM จำนวนมากและการส่งออกด้วยช่วงคีย์เฟรมคงที่ได้
    • สามารถผสานการประมวลผลแบบขนานภายในเฟรมเข้ากับการประมวลผลแบบขนานของเซกเมนต์คีย์เฟรม เพื่อให้ได้ความขนานสูงพร้อมลดการลดลงของคุณภาพให้น้อยที่สุด
  • ความท้าทายของการรีเบสอย่างต่อเนื่อง

    • การรีเบสการเปลี่ยนแปลงที่เข้ามาทุกวันอย่างต่อเนื่องเป็นความท้าทายอย่างมาก
    • ตอนนี้เมื่อถูกรวมเข้า FFmpeg แล้ว งานต่อจากนี้จะง่ายขึ้นมาก
    • นี่คือชัยชนะครั้งใหญ่ และจะช่วยเพิ่มความเร็วได้อย่างมาก
  • คาดหวังการปรับปรุงเวลาเริ่มสตรีมของ virtual display buffer ใน FFmpeg

    • โปรเจ็กต์ LLMStack ใช้ FFmpeg เพื่อสตรีมวิดีโอจากเบราว์เซอร์
    • ตอนนี้มีความหน่วงที่สังเกตได้ชัดในการบูต pipeline ทุกครั้งที่เรียกใช้แต่ละเครื่องมือ
    • การปรับปรุงของ FFmpeg น่าจะช่วยงานเพิ่มประสิทธิภาพเหล่านี้ได้อย่างแน่นอน
  • โปรโมตคอร์สสอน FFmpeg C API

    • โปรโมตคอร์สบน Udemy ที่สอน FFmpeg C API
  • ความสงสัยเกี่ยวกับโค้ดเบสของ FFmpeg

    • ไม่ค่อยรู้จักโค้ดเบสของ FFmpeg มากนัก แต่สงสัยว่าจะค่อย ๆ เปลี่ยนแปลงได้อย่างไรโดยไม่ต้องมีคอมมิตขนาดมหึมา
    • ตามที่ระบุในงานนำเสนอ มีคอมมิต 700 รายการ จึงสงสัยว่านี่เป็นบรันช์แยกต่างหาก หรือค่อย ๆ ถูกรวมเข้ามาในโปรเจ็กต์
  • มุมมองของผู้ให้บริการคลาวด์

    • หากคุณดูแลบริการคลาวด์อย่าง Netflix อยู่แล้ว คุณก็น่าจะรันโปรเซส FFmpeg หลายพันตัวบนแต่ละเครื่องอยู่แล้ว ซึ่งในทางปฏิบัติก็เท่ากับเป็นงานแบบมัลติคอร์อยู่แล้ว
  • แชร์ประสบการณ์การประมวลผล thread filter ของ VapourSynth

    • ใช้งานการประมวลผล thread filter ใน VapourSynth อย่างเพลิดเพลินมาเกือบ 10 ปีแล้ว
    • การปรับปรุง FFmpeg ครั้งนี้ยอดเยี่ยมมากเช่นกัน แต่คงไม่ได้เปลี่ยนแปลงมากนักสำหรับเวิร์กโฟลว์การเข้ารหัสแบบ VapourSynth preprocessing + av1an สำหรับวิดีโอแบบ "คุณภาพ"
  • คำถามเกี่ยวกับการรองรับมัลติคอร์ของ FFmpeg

    • สงสัยว่า FFmpeg สามารถใช้มัลติคอร์ได้กับโค้ดेकที่รวมมาทั้งหมดแล้วหรือไม่
    • ใช้ FFmpeg สำหรับเข้ารหัส MP3 ด้วย LAME ในบริการโฮสต์เสียง และคงจะดีมากหากสามารถปรับปรุงเวลาเข้ารหัสของไฟล์ยาว ๆ ได้