3 คะแนน โดย GN⁺ 2024-08-18 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • mpv เป็นเครื่องเล่นสื่อเสรีและโอเพนซอร์สที่เน้นการใช้งานผ่านบรรทัดคำสั่ง รองรับรูปแบบไฟล์สื่อ โคเดกเสียงและวิดีโอ รวมถึงรูปแบบคำบรรยายหลากหลายชนิด
  • ด้วยความสามารถด้าน สคริปต์ ที่ทรงพลังและชุดสคริปต์จากผู้ใช้ จึงขยายเครื่องเล่นพื้นฐานให้ทำงานตามต้องการได้ง่าย
  • ยังคงแนวทางการออกแบบแบบมินิมัล จึงไม่มี GUI แยกต่างหาก แต่มีตัวควบคุมบนหน้าจอขนาดเล็กสำหรับสั่งงานพื้นฐานบนวิดีโอ
  • รองรับ เอาต์พุตวิดีโอคุณภาพสูง บน OpenGL, Vulkan และ D3D11 พร้อม API สำหรับการถอดรหัสด้วยฮาร์ดแวร์ ทำให้ปรับคุณภาพการเล่นได้ในหลายสภาพแวดล้อม
  • มี C API ที่ออกแบบมาโดยคำนึงถึงการผสานเป็นไลบรารีตั้งแต่ต้น จึงสามารถนำ mpv ไปฝังใช้งานในแอปพลิเคชันอื่นได้

เครื่องเล่นสื่อที่เน้นบรรทัดคำสั่ง

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

สคริปต์และวิธีควบคุม

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

เอาต์พุตวิดีโอและการถอดรหัส

  • มี เอาต์พุตวิดีโอ บน OpenGL, Vulkan และ D3D11
  • รวมความสามารถด้านการเล่นสำหรับผู้ชื่นชอบวิดีโอไว้ด้วย
    • การสเกลวิดีโอ ด้วยอัลกอริทึมคุณภาพสูง
    • การจัดการสี
    • การกำหนดจังหวะเฟรม
    • การอินเตอร์โพเลต
    • HDR
  • บนแพลตฟอร์มส่วนใหญ่สามารถใช้ API สำหรับการถอดรหัสด้วยฮาร์ดแวร์ ได้หลายแบบ
  • สามารถเปิดใช้การถอดรหัสด้วยฮาร์ดแวร์ได้เมื่อจำเป็นขณะรัน

การผสานกับแอปพลิเคชันและสถานะการพัฒนา

  • mpv ออกแบบ C API มาตั้งแต่ต้นเพื่อให้ผสานเข้ากับแอปพลิเคชันอื่นได้ง่าย
  • โปรเจกต์ยังอยู่ระหว่างการพัฒนาอย่างต่อเนื่อง โดยมุ่งเน้นการรีแฟกเตอร์และจัดระเบียบโค้ด รวมถึงเพิ่มฟีเจอร์
  • สามารถส่งคำขอฟีเจอร์หรือแพตช์ได้ผ่าน mpv GitHub issues

ทรัพยากรที่เกี่ยวข้อง

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

 
GN⁺ 2024-08-18
ความคิดเห็นจาก Hacker News
  • mpv เป็นมีเดียเพลเยอร์ที่ยอดเยี่ยม ค่อนข้างมินิมอล ประสิทธิภาพดี และทำงานที่ควรทำได้อย่างถูกต้อง
    ยังมีคอมมิตสุดเจ๋งที่ผู้เขียนระบายความเดือดดาลเรื่อง locale ด้วย: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... อ่านแล้วขำได้

    • อาจฟังดูแปลก แต่การหลีกเลี่ยงปัญหาแบบนี้ได้อาจเป็นหนึ่งในการเพิ่มผลิตภาพครั้งใหญ่ที่สุดที่ภาษาใหม่ ๆ อย่าง Go, Rust, Swift มอบให้ ระบบนิเวศใหม่ ๆ ได้โอกาสสร้างไลบรารีมาตรฐานขึ้นมาใหม่ และสลัดการตัดสินใจมรดกอันเลวร้ายจากยุคที่เรายังไม่รู้ดีกว่านี้ เช่น locale หรือ UTF-16 ออกไปได้
      ไลบรารีมาตรฐานของหลายภาษาอย่าง Zig, Go, Rust ฯลฯ นำหน้าไลบรารีมาตรฐาน C หรือ POSIX API ไปไกลมาก แค่นั้นก็เป็นเหตุผลเพียงพอที่จะใช้แล้ว
    • เป็นบทความยาวที่มีประโยชน์ และมีคำหยาบอยู่บ้าง แนะนำอย่างยิ่ง
      เมื่อ 25 ปีก่อน Spolsky เขียนบทความชื่อ “everything you wanted to know about Unicode and character sets” ซึ่งอาจมีประโยชน์แม้กับคนที่ใช้ชีวิตอยู่แต่ในโลกหลัง Unicode/UTF แล้วก็ตาม
    • สำหรับคำพูดที่ว่า ลองจินตนาการว่าพวกเขาทำแบบนี้กับ errno เหมือนกับความพังของ C locale API ดูสิ จริง ๆ แล้วมีตัวอย่างที่เป็นแบบนั้นอยู่ นั่นคือ ฟังก์ชันเวลา อย่าง localtime, localtime_r, tzset
      มันพึ่งพา locale จึงเป็นพื้นที่ใกล้เคียงกับ locale อยู่แล้ว แต่ timezone ก็เป็น global state เช่นกัน ทำให้ในโค้ด C แบบมัลติเธรดที่พอร์ตได้ตาม POSIX เป็นไปไม่ได้ที่จะดึงเวลาของ timezone อื่นด้วย API มาตรฐานอย่างเดียว
    • “C locale กับ wchar_t ต่างก็เป็นสภาพมรดกตกทอดที่พังและไร้สมองทั้งคู่ ถ้าในคณะกรรมการมาตรฐาน C/POSIX มีคนที่มีความสามารถอยู่ มันคงถูกเลิกใช้หรือถอดออกไปนานแล้ว ก็ยังถอด gets() ออกได้ไม่ใช่หรือ ผมจะเขียนข้อความยาว ๆ เพื่อให้ความชอบธรรมกับการระเบิดอารมณ์ครั้งนี้ ซึ่งอาจดูเป็นการดูหมิ่นคนที่ไม่รู้เรื่องนี้ ใครที่ไม่สบายใจกับถ้อยคำแรง ๆ ก็ให้คิดว่านี่เป็นเอกสารทางศาสนาแล้วกัน”
      ตำนานจริง ๆ
    • ควรรู้ไว้ว่า ผู้เขียนคอมมิตนั้นไม่ได้เกี่ยวข้องกับ การพัฒนา mpv มาหลายปีแล้ว
  • เริ่มใช้บน Linux เมื่อหลายปีก่อน และตอนนี้ติดตั้งไว้ในทุกอุปกรณ์จนถึงแท็บเล็ต Android แล้ว สมบูรณ์แบบ ค่าเริ่มต้นแบบมินิมอล, การตั้งค่าที่สมเหตุสมผล, ความเร็วสูง, และแค่ใช้งานได้ดี
    แม้แต่เล่นแบบ native ผ่าน SSH ก็ยังได้ ยอดมาก: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    เมื่อไม่นานมานี้ต้องการคีย์ลัดสำหรับหมุนวิดีโอ ซึ่งดูเหมือนจะทำได้ไม่ง่ายในเพลเยอร์อื่น แต่ใน mpv แค่ใส่ r cycle_values video-rotate "90" "180" "270" "0" ลงใน input.conf ก็พอ

    • เล่นวิดีโอผ่าน HTTP ได้ด้วย และรองรับเว็บไซต์จำนวนมากรวมถึง YouTube: mpv
  • ถ้าใช้ Linux อย่าลืมเพิ่ม hwdec=auto ใน mpv.conf เพื่อเปิด hardware acceleration ใช้งานได้กับ AMD/Intel/NVIDIA
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • เพิ่งรู้ว่าดูวิดีโอด้วย mpv มาหลายปีโดยไม่ได้ใช้ hardware acceleration เลย ดีแล้วที่ได้อ่านเรื่องนี้
    • ผมตั้งค่าใช้แบบนี้: vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      ถ้า Vulkan video ไม่ทำงาน สามารถเปลี่ยน hwdec=vulkan เป็น hwdec=vaapi ได้
    • สงสัยว่าทำไมสิ่งนี้ถึงปิดไว้เป็นค่าเริ่มต้น
    • ไม่แน่ใจเหตุผล แต่บน Fedora ซึ่งน่าจะเป็นเคอร์เนล 6.10 คู่กับ Vega 64 เจอปัญหาเยอะว่าประสิทธิภาพแย่ลง มีดีเลย์และกระตุก ทุกปีจะลองใหม่สักครั้ง แต่ไม่ค่อยสำเร็จ สุดท้ายก็ยอมแพ้อีก
    • เพิ่งติดตั้ง mpv ด้วย pacman แล้วลองเล่นวิดีโอ 4K พัดลม CPU ก็เริ่มหมุนทันที และใน top เห็นว่ามีการใช้หลายคอร์ เลื่อนอ่านกระทู้ HN นี้ต่อไปจนได้รู้จัก hwdec=auto
      ในฐานะคนที่เคยใช้ mplayer กับ VLC คำถามที่ผุดขึ้นมาทันทีคือ “ผู้ดูแลยอมรับ trade-off อะไรอยู่กันแน่ ถึงไม่ตั้งค่านี้เป็นค่าเริ่มต้น?”
  • โปรเจกต์นี้มีสายสืบทอดยาวนานมาก เดิมเคยเป็นที่รู้จักในชื่อ mplayer มีคอมมิตถึง 500,000 รายการที่ย้อนกลับไปถึงปี 2001 และนั่นยังนับจากหลังจากที่รีโพซิทอรี CVS ถูกแปลงเป็น Subversion แล้ว
    การใช้ streamlink ร่วมกับ mpv บน Minix z100 แบบไร้พัดลมที่รัน Ubuntu ทำให้ได้สภาพแวดล้อมสำหรับดูโอลิมปิกที่แทบสมบูรณ์แบบ
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • คงพูดไม่ได้ว่า mplayer กับ mpv เป็นสิ่งเดียวกัน แม้ mpv จะฟอร์กมาจาก mplayer และอื่น ๆ จริง แต่ mplayer ยังคงเป็นโปรเจกต์แยกต่างหาก
  • อาจฟังดูงี่เง่า แต่สำหรับผมแล้วฟีเจอร์หลักคือการที่สามารถ แสดงซับไตเติลหลายชุดพร้อมกัน ได้ สามารถตั้งค่าแทร็ก ออฟเซ็ต ตำแหน่ง ขนาด ฯลฯ ได้ง่าย ๆ ด้วยคีย์ลัดไม่กี่ปุ่ม
    ไม่มีบริการสตรีมมิงไหนให้ฟีเจอร์นี้เลย และยังจงใจซ่อนภาษาซับไตเติลที่ตัดสินว่า “ไม่เกี่ยวข้อง” กับตำแหน่งที่อยู่ของผู้ใช้ด้วย บริการแบบนั้นยากที่จะให้ความเคารพ

    • เป็นฟีเจอร์ที่ยอดเยี่ยมจริง ๆ ผมยังไม่ได้จำคีย์ลัดให้ครบ และคงต้องจำ แต่แค่เริ่มด้วย --sid1= กับ --sid2= ก็ใช้งานได้ดีพอแล้ว
      ผมกับคู่ของผมต่างก็ไม่ใช่เจ้าของภาษาอังกฤษ และภาษาแม่ของเราก็ไม่เหมือนกัน ผมค่อนข้างสบายกับภาษาอังกฤษ แต่บางสำเนียงก็ยาก และถ้าเสียงพูดดังวุ่นวายก็มีบางครั้งที่จับคำไม่ทัน จึงชอบเปิดซับอังกฤษ ส่วนคู่ของผมชอบซับในภาษาแม่ของตัวเอง
      ถ้าเปิดซับได้หลายชุด แม้ต้องแลกกับพื้นที่หน้าจอนิดหน่อย แต่เราทั้งคู่ก็ได้ประสบการณ์การรับชมที่ต้องการ ซึ่งคุ้มค่ามาก
    • mpv แข็งแกร่งมากเรื่องการจัดการซับไตเติล ไม่เพียงแค่สลับแทร็กซับและตั้งตำแหน่งได้ แต่ยังสามารถค้นหาและเล่น ไฟล์ซับไตเติลภายนอก โดยอัตโนมัติเมื่อเล่นวิดีโอได้ด้วย
      ผมเคยเขียนเรื่องนี้ไว้: https://www.baeldung.com/linux/mpv-subtitles-automatic แต่เสียดายที่เอกสารเกี่ยวกับรูปแบบซับไตเติลที่รองรับยังมีไม่พอ และถ้าจะตรวจสอบรูปแบบที่รองรับจริง ๆ ก็ต้องไปดูโค้ดของ ffmpeg
      นอกจากนี้ https://subdl.com/ และ https://github.com/alexanderwink/subdl ยังเป็นแหล่งข้อมูลที่ดีสำหรับค้นหาและดาวน์โหลดซับไตเติลจากบรรทัดคำสั่ง
    • ฟีเจอร์แบบนี้ดีมากเป็นพิเศษสำหรับการเรียนภาษา แต่บริการอย่าง Amazon กลับแสดงแค่ภาษาอังกฤษกับภาษาท้องถิ่นประมาณสองภาษา ทั้งที่จริง ๆ มีซับอยู่ราว 30 ภาษา ส่วนความต่างระหว่างซับไตเติลกับเสียงพากย์นั้น ผมยังไม่ขอพูดถึงด้วยซ้ำ
    • การซ่อนภาษาซับไตเติลที่ “ไม่เกี่ยวข้อง” กับตำแหน่งที่อยู่ อาจเป็นเพราะปัญหาทางกฎหมาย หรือข้อจำกัดตามสัญญากับเจ้าของสิทธิ์คอนเทนต์หรือผู้ให้บริการซับไตเติลก็ได้
  • mpv ใช้งานได้ดีเสมอมา และจัดการแทบทุกอย่างที่โยนให้ได้อย่างง่ายดาย
    ตอนนี้อาจเปลี่ยนไปแล้วก็ได้ แต่เมื่อหลายปีก่อนตอนที่ผมรู้จักโปรเจกต์นี้ครั้งแรก สิ่งที่ทำให้มันแตกต่างจากเพลเยอร์อื่นคือความรู้สึกว่ามันให้ความสำคัญกับ ความถูกต้องแม่นยำ และการเล่นที่ถูกต้องมาก เช่น เคยมีไฟล์ที่ใน VLC มีปัญหาแปลก ๆ อย่างการแสดงสีเพี้ยนเล็กน้อย แต่ใน mpv กลับเล่นได้สมบูรณ์แบบ

    • เรื่องที่ VLC มีปัญหาแปลก ๆ แต่ mpv เล่นได้สมบูรณ์แบบนั้นมีมานานแล้ว ตั้งแต่ยุค MPlayer ช่วงต้นทศวรรษ 2000 ก็เป็นแบบนั้น
      แต่ก็ไม่ค่อยรู้เหมือนกันว่าทำไม เพราะคิดว่าทั้งสองตัวก็น่าจะพึ่งพาไลบรารีเดียวกันเป็นส่วนใหญ่สำหรับโค้เดกจำนวนมาก
    • เมื่อคิดว่า VLC เป็นโปรแกรมที่แทบจะกันกระสุน เล่นไฟล์อะไรก็ได้อยู่แล้ว การที่ mpv ขึ้นมาอยู่ในระดับนั้นได้ก็เป็นเรื่องน่ายินดี
    • ตอนเล่นสื่อ “HDR” ใน mpv เคยมีปัญหาค่อนข้างใหญ่เรื่อง การแสดงสี
  • mpv ยอดเยี่ยมมาก สิ่งที่แนะนำได้โดยไม่เรียงลำดับ: mpv.conf พื้นฐานของ Seeds of Might/JySzE, uosc ซึ่งเป็น UI ที่มีฟีเจอร์ครบแต่ยังคงมินิมอล, thumbfast ตัวสร้างภาพตัวอย่างที่รวดเร็วสำหรับใช้ร่วมกับ uosc หรือ UI คัสตอมอื่น ๆ, SmartSkip ของ Eisa01 ที่ใช้เสียงเป็นพื้นฐานในการข้ามช่วงเปิดเรื่อง ฯลฯ
    [1] Windows: https://gist.github.com/JySzE/db4149cad726b3b6955dca8d47a197..., macOS: https://gist.github.com/JySzE/34ee131da3974811a9469e1e3b7d4d...
    [2] https://github.com/tomasklaen/uosc
    [3] https://github.com/po5/thumbfast
    [4] https://github.com/Eisa01/mpv-scripts#smartskip

    • ไม่ได้ตั้งใจจะด้อยค่างานปลั๊กอินนั้น แต่มันเป็นการทำฟีเจอร์ข้ามช่วงเปิดเรื่องแบบ “พื้นฐาน”
      ถ้าจะหาช่วงเปิดเรื่องหรือเครดิตท้ายเรื่องให้เชื่อถือได้ ต้องใช้การวิเคราะห์แบบไม่จำกัดเฉพาะจุด โดยหลักแล้วต้องหาช่วง เสียง ที่ปรากฏร่วมกันระหว่างตอนต่าง ๆ ในหนึ่งซีซันหรือทั้งเรื่อง
      ผมเคยทำเครื่องมือ CLI ที่ทำแบบนี้ได้ แต่จริง ๆ แล้วมันไม่ได้อยู่ในสภาพ “เสร็จสมบูรณ์” และก็คงจะเป็นแบบนั้นต่อไป เป้าหมายแรกคือพัฒนาปลั๊กอิน Jellyfin แต่ภายหลังถึงได้รู้ว่ามีปลั๊กอินแบบนั้นอยู่แล้ว
      https://github.com/aksiksi/needle
  • เป็นมีเดียเพลเยอร์ที่ดีที่สุดในปัจจุบัน ชอบ UI มินิมอล ที่ยอดเยี่ยม การใช้ประโยชน์จากการเร่งความเร็วด้วยฮาร์ดแวร์ และการที่มันก็แค่เล่นวิดีโอ
    เพราะมันยังคงยอดเยี่ยมแบบนี้ต่อไป จึงอาจเป็นหนึ่งในเหตุผลที่ทำให้ผมคงละเมิดลิขสิทธิ์ไปตลอดชีวิต บริการสตรีมมิงทุ่มเงินหลายล้านดอลลาร์กับเพลเยอร์ของตัวเอง แต่ก็ยังเข้าใกล้ระดับนี้ไม่ได้

    • YouTube ดูเหมือนจงใจทำให้ เว็บเพลเยอร์ แย่ลง เพื่อผลักดันให้ดาวน์โหลดแอปและอัปเกรดเป็น Premium
  • MPV มีสคริปต์ที่ใช้งานได้หลากหลาย ตัวอย่างเช่น สามารถตัดหรือครอปวิดีโอที่กำลังดูอยู่ได้[1]
    ยังสามารถใส่ฟีเจอร์ที่ไม่เคยเห็นในเพลเยอร์อื่นเป็นคีย์ลัดได้ด้วย บางครั้งฉันใช้ n vf toggle normalize=smoothing=100 ใน input.conf เพื่อปรับความสว่างและสีของฉากที่กำลังดูให้เป็นมาตรฐาน แต่ถ้าใช้ฮาร์ดแวร์ดีโค้ดดิ้งก็อาจไม่ทำงาน
    การหมุนวิดีโอตั้งค่าได้ประมาณ Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0"
    [1] <https://github.com/occivink/mpv-scripts>

    • โดยส่วนตัวแล้ว ฉันใช้ MPV เป็นหลักในการเล่นไลบรารีเพลงที่ส่วนใหญ่เป็นไฟล์ FLAC และทำปลั๊กอิน[1] ด้วย JS เพื่อส่งประวัติการเล่นไปยัง listenbrainz.org มันเรียบง่ายมาก แต่ก็ทำงานได้ดีมาตลอดหลายเดือนที่ผ่านมา
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv ยังมี อินเทอร์เฟซสคริปต์ Lua ที่แข็งแกร่งด้วย ฉันทำเครื่องมือด้วย Golang และ Lua เพื่อให้ mpv จัดการไฟล์ทอร์เรนต์และลิงก์แม่เหล็กเหมือนเป็นลิงก์ HTTP ได้ และผลลัพธ์คือสามารถสตรีมทอร์เรนต์ได้ทันที
      อีกเรื่องที่คนไม่ค่อยรู้คือ mpv ไม่เพียงสตรีมวิดีโอ YouTube ได้เท่านั้น แต่ยังค้นหา YouTube จาก CLI ได้ด้วย mpv ytdl://ytsearch:query
      นอกจากนี้ยังเล่นวิดีโอโดยตรงในเทอร์มินัลได้ด้วยการใช้โปรโตคอลภาพ ASCII, sixel และ kitty ซึ่งในบรรดานี้ โปรโตคอลภาพ kitty ให้คุณภาพเหนือกว่าอย่างชัดเจน
  • ฟีเจอร์ที่ฉันชอบที่สุดใน mpv จนถึงตอนนี้คือสามารถใช้ CRT shader กับคอนเทนต์แบบเรียลไทม์ได้ วิธีนี้ยังดาวน์สเกลวิดีโอ HD ลงเป็นบัฟเฟอร์ 240p จริงอย่างถูกต้องก่อน จากนั้น shader จะจัดการอัปสเกลให้เข้ากับความละเอียดของหน้าจอ
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders