- mpv เป็นเครื่องเล่นสื่อเสรีและโอเพนซอร์สที่เน้นการใช้งานผ่านบรรทัดคำสั่ง รองรับรูปแบบไฟล์สื่อ โคเดกเสียงและวิดีโอ รวมถึงรูปแบบคำบรรยายหลากหลายชนิด
- ด้วยความสามารถด้าน สคริปต์ ที่ทรงพลังและชุดสคริปต์จากผู้ใช้ จึงขยายเครื่องเล่นพื้นฐานให้ทำงานตามต้องการได้ง่าย
- ยังคงแนวทางการออกแบบแบบมินิมัล จึงไม่มี GUI แยกต่างหาก แต่มีตัวควบคุมบนหน้าจอขนาดเล็กสำหรับสั่งงานพื้นฐานบนวิดีโอ
- รองรับ เอาต์พุตวิดีโอคุณภาพสูง บน OpenGL, Vulkan และ D3D11 พร้อม API สำหรับการถอดรหัสด้วยฮาร์ดแวร์ ทำให้ปรับคุณภาพการเล่นได้ในหลายสภาพแวดล้อม
- มี C API ที่ออกแบบมาโดยคำนึงถึงการผสานเป็นไลบรารีตั้งแต่ต้น จึงสามารถนำ mpv ไปฝังใช้งานในแอปพลิเคชันอื่นได้
เครื่องเล่นสื่อที่เน้นบรรทัดคำสั่ง
- mpv เป็นเครื่องเล่นสื่อเสรีสำหรับใช้งานผ่านบรรทัดคำสั่ง
- รองรับ รูปแบบไฟล์สื่อ โคเดกเสียงและวิดีโอ รวมถึงรูปแบบคำบรรยายที่หลากหลาย
สคริปต์และวิธีควบคุม
- ความสามารถด้าน สคริปต์ ช่วยขยายการทำงานของเครื่องเล่นได้อย่างกว้างขวาง
- สคริปต์จากผู้ใช้ถูกรวบรวมไว้ที่ User Scripts ใน wiki
- มุ่งเน้นความมินิมัล จึงไม่มี GUI แยกต่างหาก
- สำหรับการควบคุมพื้นฐาน สามารถใช้ ตัวควบคุมบนหน้าจอ ขนาดเล็กที่แสดงทับบนวิดีโอได้
เอาต์พุตวิดีโอและการถอดรหัส
- มี เอาต์พุตวิดีโอ บน OpenGL, Vulkan และ D3D11
- รวมความสามารถด้านการเล่นสำหรับผู้ชื่นชอบวิดีโอไว้ด้วย
- การสเกลวิดีโอ ด้วยอัลกอริทึมคุณภาพสูง
- การจัดการสี
- การกำหนดจังหวะเฟรม
- การอินเตอร์โพเลต
- HDR
- บนแพลตฟอร์มส่วนใหญ่สามารถใช้ API สำหรับการถอดรหัสด้วยฮาร์ดแวร์ ได้หลายแบบ
- สามารถเปิดใช้การถอดรหัสด้วยฮาร์ดแวร์ได้เมื่อจำเป็นขณะรัน
การผสานกับแอปพลิเคชันและสถานะการพัฒนา
- mpv ออกแบบ C API มาตั้งแต่ต้นเพื่อให้ผสานเข้ากับแอปพลิเคชันอื่นได้ง่าย
- API อยู่ใน client.h
- โปรเจกต์ยังอยู่ระหว่างการพัฒนาอย่างต่อเนื่อง โดยมุ่งเน้นการรีแฟกเตอร์และจัดระเบียบโค้ด รวมถึงเพิ่มฟีเจอร์
- สามารถส่งคำขอฟีเจอร์หรือแพตช์ได้ผ่าน mpv GitHub issues
ทรัพยากรที่เกี่ยวข้อง
- Installation: คู่มือการติดตั้ง
- Source Code Repository: ที่เก็บซอร์สโค้ด
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
mpv เป็นมีเดียเพลเยอร์ที่ยอดเยี่ยม ค่อนข้างมินิมอล ประสิทธิภาพดี และทำงานที่ควรทำได้อย่างถูกต้อง
ยังมีคอมมิตสุดเจ๋งที่ผู้เขียนระบายความเดือดดาลเรื่อง locale ด้วย: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... อ่านแล้วขำได้
ไลบรารีมาตรฐานของหลายภาษาอย่าง 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 มาตรฐานอย่างเดียว
wchar_tต่างก็เป็นสภาพมรดกตกทอดที่พังและไร้สมองทั้งคู่ ถ้าในคณะกรรมการมาตรฐาน C/POSIX มีคนที่มีความสามารถอยู่ มันคงถูกเลิกใช้หรือถอดออกไปนานแล้ว ก็ยังถอดgets()ออกได้ไม่ใช่หรือ ผมจะเขียนข้อความยาว ๆ เพื่อให้ความชอบธรรมกับการระเบิดอารมณ์ครั้งนี้ ซึ่งอาจดูเป็นการดูหมิ่นคนที่ไม่รู้เรื่องนี้ ใครที่ไม่สบายใจกับถ้อยคำแรง ๆ ก็ให้คิดว่านี่เป็นเอกสารทางศาสนาแล้วกัน”ตำนานจริง ๆ
เริ่มใช้บน 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ก็พอmpvถ้าใช้ Linux อย่าลืมเพิ่ม
hwdec=autoในmpv.confเพื่อเปิด hardware acceleration ใช้งานได้กับ AMD/Intel/NVIDIAhttps://interfacinglinux.com/2024/01/10/hardware-acceleratio...
vo=gpu-next,gpu-api=vulkan,hwdec=vulkan,gpu-context=waylandvkถ้า Vulkan video ไม่ทำงาน สามารถเปลี่ยน
hwdec=vulkanเป็นhwdec=vaapiได้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...
อาจฟังดูงี่เง่า แต่สำหรับผมแล้วฟีเจอร์หลักคือการที่สามารถ แสดงซับไตเติลหลายชุดพร้อมกัน ได้ สามารถตั้งค่าแทร็ก ออฟเซ็ต ตำแหน่ง ขนาด ฯลฯ ได้ง่าย ๆ ด้วยคีย์ลัดไม่กี่ปุ่ม
ไม่มีบริการสตรีมมิงไหนให้ฟีเจอร์นี้เลย และยังจงใจซ่อนภาษาซับไตเติลที่ตัดสินว่า “ไม่เกี่ยวข้อง” กับตำแหน่งที่อยู่ของผู้ใช้ด้วย บริการแบบนั้นยากที่จะให้ความเคารพ
--sid1=กับ--sid2=ก็ใช้งานได้ดีพอแล้วผมกับคู่ของผมต่างก็ไม่ใช่เจ้าของภาษาอังกฤษ และภาษาแม่ของเราก็ไม่เหมือนกัน ผมค่อนข้างสบายกับภาษาอังกฤษ แต่บางสำเนียงก็ยาก และถ้าเสียงพูดดังวุ่นวายก็มีบางครั้งที่จับคำไม่ทัน จึงชอบเปิดซับอังกฤษ ส่วนคู่ของผมชอบซับในภาษาแม่ของตัวเอง
ถ้าเปิดซับได้หลายชุด แม้ต้องแลกกับพื้นที่หน้าจอนิดหน่อย แต่เราทั้งคู่ก็ได้ประสบการณ์การรับชมที่ต้องการ ซึ่งคุ้มค่ามาก
ผมเคยเขียนเรื่องนี้ไว้: https://www.baeldung.com/linux/mpv-subtitles-automatic แต่เสียดายที่เอกสารเกี่ยวกับรูปแบบซับไตเติลที่รองรับยังมีไม่พอ และถ้าจะตรวจสอบรูปแบบที่รองรับจริง ๆ ก็ต้องไปดูโค้ดของ ffmpeg
นอกจากนี้ https://subdl.com/ และ https://github.com/alexanderwink/subdl ยังเป็นแหล่งข้อมูลที่ดีสำหรับค้นหาและดาวน์โหลดซับไตเติลจากบรรทัดคำสั่ง
mpv ใช้งานได้ดีเสมอมา และจัดการแทบทุกอย่างที่โยนให้ได้อย่างง่ายดาย
ตอนนี้อาจเปลี่ยนไปแล้วก็ได้ แต่เมื่อหลายปีก่อนตอนที่ผมรู้จักโปรเจกต์นี้ครั้งแรก สิ่งที่ทำให้มันแตกต่างจากเพลเยอร์อื่นคือความรู้สึกว่ามันให้ความสำคัญกับ ความถูกต้องแม่นยำ และการเล่นที่ถูกต้องมาก เช่น เคยมีไฟล์ที่ใน VLC มีปัญหาแปลก ๆ อย่างการแสดงสีเพี้ยนเล็กน้อย แต่ใน 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 มินิมอล ที่ยอดเยี่ยม การใช้ประโยชน์จากการเร่งความเร็วด้วยฮาร์ดแวร์ และการที่มันก็แค่เล่นวิดีโอ
เพราะมันยังคงยอดเยี่ยมแบบนี้ต่อไป จึงอาจเป็นหนึ่งในเหตุผลที่ทำให้ผมคงละเมิดลิขสิทธิ์ไปตลอดชีวิต บริการสตรีมมิงทุ่มเงินหลายล้านดอลลาร์กับเพลเยอร์ของตัวเอง แต่ก็ยังเข้าใกล้ระดับนี้ไม่ได้
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>
[1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
อีกเรื่องที่คนไม่ค่อยรู้คือ 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