- 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ó 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
- Các script do người dùng tạo được tập hợp tại User Scripts trên wiki
- 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
- API có tại client.h
- 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
- Installation: Hướng dẫn cài đặt
- Source Code Repository: Kho mã nguồn
1 bình luận
Ý 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
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
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
errnocũ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,tzsetVì 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
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ảigets()đã 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
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.mp4Gầ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àoinput.conflà đượcmpvNếu dùng Linux, đừng quên thêm
hwdec=autovàompv.confđể bật tăng tốc phần cứng. Hoạt động trên AMD/Intel/NVIDIAhttps://interfacinglinux.com/2024/01/10/hardware-acceleratio...
vo=gpu-next,gpu-api=vulkan,hwdec=vulkan,gpu-context=waylandvkNếu Vulkan video không hoạt động thì có thể đổi
hwdec=vulkanthànhhwdec=vaapipacmanvà mở thử video 4K, quạt CPU lập tức quay, còntopcho thấy nhiều core đang được dùng. Kéo tiếp bài HN này thì biết đếnhwdec=autoTừ 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...
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
--sid1=và--sid2=là đã hoạt động đủ tốtTô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
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/ và 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
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
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
mpv rất tuyệt. Một số thứ đáng khuyên dùng, không theo thứ tự nào:
mpv.confmặ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ì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
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=100tronginput.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 độngXoay 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>
[1]: https://gist.github.com/madeindjs/f33225cf4d8fdc9f61e0fe3ebe...
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:queryNgoà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