3 điểm bởi GN⁺ 2024-08-18 | 1 bình luận | Chia sẻ qua WhatsApp
  • mpv là trình phát đa phương tiện tự do và mã nguồn mở, thiên về dòng lệnh, hỗ trợ nhiều định dạng tệp media, codec âm thanh·video và định dạng phụ đề
  • Nhờ khả năng script mạnh mẽ và bộ sưu tập script do người dùng tạo, người dùng có thể dễ dàng mở rộng trình phát mặc định theo cách mình muốn
  • Giữ thiết kế tối giản nên không có GUI riêng, nhưng cung cấp một bộ điều khiển trên màn hình nhỏ để thao tác cơ bản ngay trên video
  • Hỗ trợ xuất video chất lượng cao dựa trên OpenGL, Vulkan, D3D11 và các API giải mã phần cứng, cho phép điều chỉnh chất lượng phát trên nhiều môi trường khác nhau
  • C API được thiết kế ngay từ đầu để tích hợp thư viện, nên có thể nhúng mpv vào các ứng dụng khác để sử dụng

Trình phát đa phương tiện thiên về dòng lệnh

  • mpv là một trình phát đa phương tiện tự do dùng trên dòng lệnh
  • Hỗ trợ nhiều định dạng tệp media, codec âm thanh·video và định dạng phụ đề

Script và cách điều khiển

  • Có thể mở rộng hành vi của trình phát một cách rộng rãi bằng khả năng script
  • Theo đuổi chủ nghĩa tối giản nên không cung cấp GUI riêng
  • Với các thao tác cơ bản, có thể dùng bộ điều khiển trên màn hình nhỏ hiển thị trên video

Xuất video và giải mã

  • Cung cấp xuất video dựa trên OpenGL, Vulkan, D3D11
  • Cũng bao gồm các tính năng phát dành cho người đam mê video
    • Scale video dựa trên thuật toán chất lượng cao
    • Quản lý màu sắc
    • Căn thời gian khung hình
    • Nội suy
    • HDR
  • Trên hầu hết nền tảng, có thể tận dụng nhiều API giải mã phần cứng khác nhau
  • Có thể bật giải mã phần cứng khi cần ngay trong lúc chạy

Tích hợp ứng dụng và trạng thái phát triển

  • mpv đã thiết kế C API ngay từ đầu để dễ dàng tích hợp vào các ứng dụng khác
  • Dự án đang được phát triển tích cực, tập trung vào tái cấu trúc mã, dọn dẹp và bổ sung tính năng
  • Có thể gửi yêu cầu tính năng hoặc bản vá qua mpv GitHub issues

Tài nguyên liên quan

1 bình luận

 
GN⁺ 2024-08-18
Ý kiến trên Hacker News
  • mpv là một trình phát media tuyệt vời. Khá tối giản, hiệu năng tốt và làm đúng việc cần làm
    Cũng có một commit rất hay, trong đó tác giả nổi giận về locale: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... đáng đọc để cười

    • Nghe có vẻ lạ, nhưng việc tránh được những vấn đề kiểu này có thể là một trong những mức tăng năng suất lớn nhất mà các ngôn ngữ mới như Go, Rust, Swift mang lại. Các hệ sinh thái mới có cơ hội làm lại thư viện chuẩn, và có thể rũ bỏ những lựa chọn di sản tệ hại từ thời chưa hiểu rõ hơn, như locale hay UTF-16
      Thư viện chuẩn của nhiều ngôn ngữ như Zig, Go, Rust, v.v. đi trước thư viện chuẩn C hay API POSIX rất xa. Chỉ riêng điều đó đã đủ là lý do để dùng chúng
    • Một bài viết dài và hữu ích, cũng có vài câu chửi. Rất khuyến nghị đọc
      25 năm trước Spolsky đã viết bài “everything you wanted to know about Unicode and character sets”, và nó vẫn có thể hữu ích cho cả những người chỉ sống trong thế giới sau Unicode/UTF
    • Về câu nói rằng hãy tưởng tượng errno cũng bị làm theo kiểu API locale của C bị hỏng, thực ra có ví dụ đã thành như vậy. Đó là các hàm thời gian như localtime, localtime_r, tzset
      Vì chúng phụ thuộc vào locale nên cũng gần với vùng liên quan đến locale, nhưng múi giờ cũng là trạng thái toàn cục, nên trong mã C đa luồng có tính portable theo POSIX, không thể lấy thời gian ở múi giờ khác chỉ bằng API chuẩn
    • “C locale và wchar_t đều là những di sản hỏng hóc, chết não. Nếu trong ủy ban tiêu chuẩn C/POSIX có người đủ năng lực thì chúng đã bị loại bỏ hoặc xóa đi từ lâu. Chẳng phải gets() đã bị xóa rồi sao. Tôi sẽ viết một bài dài để biện minh cho cơn bùng nổ cảm xúc này, vốn có thể xúc phạm những ai không biết. Ai không thoải mái với lời lẽ nặng nề thì hãy xem nó như tài liệu tôn giáo.”
      Thật sự huyền thoại
    • Cũng đáng lưu ý là tác giả commit đó đã không còn liên quan đến phát triển mpv trong vài năm nay
  • Tôi bắt đầu dùng trên Linux vài năm trước, và giờ nó được cài trên mọi thiết bị của tôi, đến cả tablet Android. Hoàn hảo. Mặc định tối giản, cấu hình hợp lý, tốc độ nhanh, đơn giản là chạy tốt
    Thậm chí còn có thể phát native qua SSH, rất tuyệt: mpv sftp://mit@nyx/home/mit/Work/merged.mp4
    Gần đây tôi cần phím tắt để xoay video, điều này có vẻ không dễ làm trong các trình phát khác, còn với mpv chỉ cần thêm r cycle_values video-rotate "90" "180" "270" "0" vào input.conf là được

    • Nó cũng có thể phát video qua HTTP và hỗ trợ nhiều website, bao gồm YouTube: mpv
  • Nếu dùng Linux, đừng quên thêm hwdec=auto vào mpv.conf để bật tăng tốc phần cứng. Hoạt động trên AMD/Intel/NVIDIA
    https://interfacinglinux.com/2024/01/10/hardware-acceleratio...

    • Hóa ra suốt nhiều năm xem video bằng mpv tôi đã dùng mà không có tăng tốc phần cứng. May mà đọc được cái này
    • Tôi cấu hình kiểu này để dùng: vo=gpu-next, gpu-api=vulkan, hwdec=vulkan, gpu-context=waylandvk
      Nếu Vulkan video không hoạt động thì có thể đổi hwdec=vulkan thành hwdec=vaapi
    • Không hiểu sao cái này lại bị tắt theo mặc định
    • Không rõ lý do, nhưng với Fedora, có lẽ là kết hợp kernel 6.10 và Vega 64, tôi gặp nhiều vấn đề hiệu năng tệ hơn, độ trễ và giật hình. Mỗi năm tôi lại thử lại khoảng một lần, nhưng không ổn nên lại bỏ cuộc
    • Tôi vừa cài mpv bằng pacman và mở thử video 4K, quạt CPU lập tức quay, còn top cho thấy nhiều core đang được dùng. Kéo tiếp bài HN này thì biết đến hwdec=auto
      Từ góc nhìn của người từng dùng mplayer và VLC, câu hỏi bật ra ngay là: “các maintainer đang chấp nhận trade-off nào khi không đặt cái này làm mặc định?”
  • Đây là một dự án có dòng dõi rất lâu đời, trước đây được biết đến là mplayer. Có tới 500 nghìn commit lùi về tận năm 2001, và đó còn là tính từ sau khi kho CVS được chuyển sang Subversion
    Dùng streamlink cùng mpv trên Minix z100 không quạt chạy Ubuntu gần như là môi trường xem Olympic hoàn hảo
    https://streamlink.github.io/
    https://www.minix.com.hk/products/z100-0db-fanless-n100-mini...

    • Khó có thể nói mplayer và mpv là cùng một thứ. Đúng là mpv được fork từ mplayer và các dự án khác, nhưng mplayer vẫn là một dự án riêng biệt
  • Nghe có vẻ ngớ ngẩn, nhưng với cá nhân tôi, tính năng cốt lõi là có thể hiển thị nhiều phụ đề cùng lúc. Có thể dễ dàng thiết lập track, độ lệch thời gian, vị trí, kích thước, v.v. bằng vài phím tắt
    Không dịch vụ streaming nào cung cấp điều này, và họ còn chủ động ẩn các ngôn ngữ phụ đề mà họ cho là “không liên quan” đến vị trí của người dùng. Thật khó tôn trọng những dịch vụ như vậy

    • Đây thật sự là một tính năng tuyệt vời. Tôi cũng chưa thuộc hẳn các phím tắt và có lẽ nên học, nhưng chỉ cần bắt đầu với --sid1=--sid2= là đã hoạt động đủ tốt
      Tôi và bạn đời đều không phải người bản ngữ tiếng Anh, và tiếng mẹ đẻ của chúng tôi cũng khác nhau. Tôi khá thoải mái với tiếng Anh, nhưng một số phương ngữ thì khó nghe và khi âm thanh ồn, đôi lúc tôi bỏ lỡ từ, nên tôi thích phụ đề tiếng Anh. Bạn đời tôi thích phụ đề bằng tiếng mẹ đẻ của mình
      Việc hiển thị nhiều phụ đề cho phép cả hai có trải nghiệm xem như mong muốn, đổi lại chỉ tốn một chút diện tích màn hình, và điều đó hoàn toàn xứng đáng
    • mpv rất mạnh về xử lý phụ đề. Không chỉ có thể chuyển track phụ đề và đặt vị trí, khi phát video nó còn có thể tự động tìm và phát tệp phụ đề bên ngoài
      Tôi đã viết về việc này: https://www.baeldung.com/linux/mpv-subtitles-automatic. Tuy vậy, điều đáng tiếc là tài liệu về các định dạng phụ đề được hỗ trợ còn thiếu; để kiểm tra các định dạng thực sự được hỗ trợ, tôi đã phải xem mã ffmpeg
      Ngoài ra, https://subdl.com/https://github.com/alexanderwink/subdl là những tài nguyên tốt để tìm và tải phụ đề từ dòng lệnh
    • Tính năng như vậy đặc biệt hữu ích cho việc học ngôn ngữ. Thế nhưng các dịch vụ như Amazon thực tế chỉ hiển thị khoảng hai phụ đề là tiếng Anh và ngôn ngữ địa phương, dù họ có tới chừng 30 phụ đề. Tôi còn chưa muốn nói đến sự khác nhau giữa phụ đề và lồng tiếng
    • Việc ẩn các ngôn ngữ phụ đề “không liên quan” đến vị trí có thể là do vấn đề pháp lý hoặc các hạn chế hợp đồng với chủ sở hữu quyền nội dung hay nhà cung cấp phụ đề
  • mpv luôn hoạt động tốt và dễ dàng xử lý gần như mọi thứ được ném cho nó
    Giờ có thể đã khác, nhưng khi lần đầu biết đến dự án này vài năm trước, điều khiến nó khác biệt với các trình phát khác là cảm giác nó rất coi trọng độ chính xác và việc phát lại chính xác. Chẳng hạn, có những tệp trong VLC gặp vấn đề kỳ lạ kiểu tái tạo màu hơi sai, nhưng trong mpv thì từng được phát hoàn hảo

    • Chuyện VLC gặp các vấn đề kỳ lạ còn mpv phát hoàn hảo đã có từ lâu. Hồi đầu những năm 2000, thời MPlayer cũng đã vậy
      Tuy nhiên tôi cũng không rõ vì sao. Vì tôi nghĩ cả hai nhìn chung đều dựa vào cùng các thư viện cho nhiều codec
    • Xét việc VLC gần như ở mức chống đạn, phát được gần như mọi tệp, thì thật vui khi mpv cũng đã đạt tới tầm đó
    • Khi phát media “HDR” trong mpv, từng có vấn đề khá lớn về biểu hiện màu sắc
  • mpv rất tuyệt. Một số thứ đáng khuyên dùng, không theo thứ tự nào: mpv.conf mặc định của Seeds of Might/JySzE, uosc — UI giàu tính năng nhưng vẫn tối giản, thumbfast — trình tạo thumbnail nhanh dùng cùng uosc hoặc UI tùy biến khác, SmartSkip của Eisa01 để bỏ qua opening, v.v. dựa trên âm thanh
    [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

    • Tôi không có ý xem nhẹ công sức làm plugin đó, nhưng đó là một cách triển khai bỏ qua opening ở mức “cơ bản”
      Để tìm opening hoặc credit cuối một cách ổn định, cần phân tích phi cục bộ. Về cơ bản, phải tìm các đoạn âm thanh xuất hiện chung giữa các tập trong một mùa hoặc toàn bộ tác phẩm
      Tôi đã làm một công cụ CLI có thể làm việc này, nhưng thật ra nó chưa ở trạng thái “hoàn thiện” và có lẽ về sau cũng vẫn vậy. Mục tiêu ban đầu là phát triển một plugin Jellyfin, nhưng sau đó tôi mới biết đã có plugin như vậy rồi
      https://github.com/aksiksi/needle
  • Đây là trình phát media tốt nhất hiện nay. Tôi thích UI tối giản tuyệt vời, việc tận dụng tăng tốc phần cứng, và chuyện nó đơn giản là phát video
    Vì nó cứ xuất sắc như vậy, có lẽ đây sẽ là một trong những lý do khiến tôi tiếp tục tải lậu cả đời. Các dịch vụ streaming chi hàng triệu đô cho trình phát của họ mà vẫn không tiến gần được đến mức này

    • YouTube có vẻ cố tình làm yếu trình phát web để thúc đẩy người dùng tải ứng dụng và nâng cấp lên Premium
  • MPV có các script rất đa năng. Ví dụ có thể cắt hoặc crop video đang xem[1]
    Cũng có thể gán phím tắt cho những tính năng mà tôi chưa từng thấy ở các trình phát khác. Thỉnh thoảng tôi dùng n vf toggle normalize=smoothing=100 trong input.conf để chuẩn hóa độ sáng và màu của cảnh đang xem, nhưng nếu dùng giải mã phần cứng thì có thể không hoạt động
    Xoay video được cấu hình kiểu như Ctrl+r no-osd cycle-values video-rotate "90" "180" "270" "0"
    [1] <https://github.com/occivink/mpv-scripts>

    • Cá nhân tôi chủ yếu dùng MPV để phát thư viện nhạc chứa các file FLAC, và tự làm một plugin[1] bằng JS để gửi lịch sử phát lên listenbrainz.org. Rất đơn giản nhưng đã hoạt động tốt trong vài tháng qua
      [1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
    • mpv cũng có giao diện scripting Lua rất vững chắc. Tôi đã tạo một công cụ bằng Golang và Lua để mpv xử lý file torrent và liên kết magnet như liên kết HTTP, nhờ đó có thể stream torrent trực tiếp
      Một điểm nhiều người không biết là mpv không chỉ stream được video YouTube, mà còn có thể tìm kiếm YouTube từ CLI bằng mpv ytdl://ytsearch:query
      Ngoài ra, có thể phát video trực tiếp trong terminal bằng ASCII, sixel và giao thức ảnh kitty; trong số này, giao thức ảnh kitty cho chất lượng vượt trội hơn hẳn
  • Tính năng tôi thích nhất ở mpv cho đến nay là có thể áp dụng shader CRT lên nội dung theo thời gian thực. Cách này sẽ downscale video HD đúng nghĩa xuống buffer 240p thực, rồi shader cũng xử lý việc upscale cho phù hợp với độ phân giải màn hình
    https://i.imgur.com/akmgzxX.png
    https://github.com/hhirtz/mpv-retro-shaders