HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
mpv-player
mpv
C2013–2026
mpv-player / mpv

mpv

🎥 Command line media player

130Distinct people
156Mentions
3Explicit recommenders
38.1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

🎥 Command line media player

GitHub

Where it is used

  • Celluloid — Celluloid uses mpv via libmpv’s client API to power its media playback. It serves as a GTK frontend that relies on mpv for playback capabilities. Source
  • IINA — IINA uses mpv as the underlying media engine it is built on. This powers its media playback capabilities. Source

What people are saying

My favorite infamous example being the MPV C locale commit: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... You can really feel the author's rage at the state…

0cf8612b2e1e used a recommendation phrase. 3 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 5:03:38 AM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year156 dated mentions

Observed mentions: 2013-08-11 10:08:17 UTC to 2026-07-14 21:01:20 UTC.

05101520252013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 6 mentions; 2 submissions, 4 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 4 mentions; 2 submissions, 2 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 10 mentions; 3 submissions, 7 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 7 mentions; 1 submissions, 6 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 8 mentions; 2 submissions, 6 comments20192020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 21 mentions; 4 submissions, 17 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 16 mentions; 4 submissions, 12 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 22 mentions; 2 submissions, 20 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 19 mentions; 6 submissions, 13 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 23 mentions; 6 submissions, 17 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 5 mentions; 1 submissions, 4 comments2026-01-01 00:00:00 UTC to 2027-01-01 00:00:00 UTC (exclusive): 3 mentions; 1 submissions, 2 comments. Incomplete calendar period.2026*

* An incomplete calendar period is marked with an outlined bar. Its count is not directly comparable with a full period.

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC624
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC606
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC422
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC606
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC1037
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC716
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC826
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC21417
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC16412
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC22220
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC19613
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC23617
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC514
2026 (partial)2026-01-01 00:00:00 UTC2027-01-01 00:00:00 UTC312

From the project README

An excerpt from the repository, fetched Nov 12, 2026.

Read the project’s introduction
mpv External links Overview System requirements Downloads Changelog Compilation Release cycle Bug reports Contributing License Contact External links Wiki User Scripts FAQ Manual Overview mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types. There is a FAQ. Releases can be found on the release list. System requirements A not too ancient Linux (usually, only the latest releases of distributions are actively supported), Windows 10 1607 or later, or macOS 10.15 or later. A somewhat capable CPU. Hardware decoding might help if the CPU is too slow to decode video in realtime, but must be explicitly enabled with the --hwdec option. A not too crappy GPU. mpv's focus is not on power-efficient playback on embedded or integrated GPUs (for example, hardware decoding is not even enabled by default). Low power GPUs may cause issues like tearing, stutter, etc. On such GPUs, it's recommended to use --profile=fast for smooth playback. The main video output uses shaders for video rendering and scaling, rather than GPU fixed function hardware. On Windows, you might want to make sure the graphics drivers are current. In some cases, ancient fallback video output methods can help (such as --vo=xv on Linux), but this use is not recommended or supported. mpv does not go out of its way to break on older hardware or old, unsupported operating systems, but development is not done with them in mind. Keeping compatibility with such setups is not guaranteed. If things work, consider it a happy accident. Downloads For semi-official builds and third-party packages please see mpv.io/installation. Changelog There is no complete changelog; however, changes to the player core interface are listed in the interface changelog. Changes to the C API are documented in the client API changelog. The release list has a summary of most of the important changes on every release. Changes to the default key bindings are indicated in restore-old-bindings.conf. Changes to the default OSC bindings are indicated in restore-osc-bindings.conf. Compilation Compiling with full features requires development files for several external libraries. Mpv requires meson to build. Meson can be obtained from your distro or PyPI. After creating your build directory (e.g. meson setup build), you can view a list of all the build options via meson configure build. You could also just simply look at the meson_options.txt file. Logs are stored in meson-logs within your build directory. Example: meson setup build meson compile -C build meson install -C build For libplacebo, meson can use a git check out as a subproject for a convenient way to compile mpv if a sufficient libplacebo version is not easily available in the build environment. It will be statically linked with mpv. Example: mkdir -p subprojects git clone https://code.videolan.org/videolan/libplacebo.git --depth=1 --recursive subprojects/libplacebo Essential dependencies (incomplete list): gcc or clang X development headers (xlib, xrandr, xext, xscrnsaver, xpresent, libvdpau, libGL, GLX, EGL, xv, ...) Audio output development headers (libasound/ALSA, pulseaudio) FFmpeg libraries (libavutil libavcodec libavformat libswscale libavfilter and either libswresample or libavresample) libplacebo zlib iconv (normally provided by the system libc) libass (OSD, OSC, text subtitles) Lua (optional, required for the OSC pseudo-GUI and youtube-dl integration) libjpeg (optional, used for screenshots only) uchardet (optional, for subtitle charset detection) nvdec and vaapi libraries for hardware decoding on Linux (optional) Libass dependencies (when building libass): gcc or clang, nasm on x86 and x86_64 fribidi, freetype, fontconfig development headers (for libass) harfbuzz (required for correct rendering of combining characters, particularly for correct rendering of non-English text on macOS, and Arabic/Indic scripts on any platform) FFmpeg dependencies (when building FFmpeg): gcc or clang, nasm on x86 and x86_64 OpenSSL or GnuTLS (have to be explicitly enabled when compiling FFmpeg) libx264/libmp3lame/libfdk-aac if you want to use encoding (have to be explicitly enabled when compiling FFmpeg) For native DASH playback, FFmpeg needs to be built with --enable-libxml2 (although there are security implications, and DASH support has lots of bugs). AV1 decoding support requires dav1d. For good nvidia support on Linux, make sure nv-codec-headers is installed and can be found by configure. Most of the above libraries are available in suitable versions on normal Linux distributions. For ease of compiling the latest git master of everything, you may wish to use the separately available build wrapper (mpv-build) which first compiles FFmpeg libraries and libass, and then compiles the player statically linked against those. If you want to build a Windows binary, see Windows compilation. Release cycle Once or twice a year, a release is cut off from the current development state and is assigned a 0.X.0 version number. No further maintenance is done, except in the event of security issues. The goal of releases is to make Linux distributions happy. Linux distributions are also expected to apply their own patches in case of bugs. Releases other than the latest release are unsupported and unmaintained. See the release policy document for more information. Bug reports Please use the issue tracker provided by GitHub to send us bug reports or feature requests. Follow the template's instructions or the issue will likely be ignored or closed as invalid. Questions can be asked in the discussions or on IRC (see Contact below). Contributing Please read contribute.md. For small changes you can just send us pull requests through GitHub. For bigger changes come and talk to us on IRC before you start working on them. It will make code review easier for both parties later on. You can check the wiki or the issue tracker for ideas o
Read the full README on GitHub

What Hacker News says

16 sources
> Its very much like learning CLI, except you need to memorize the keys on a GUI medial player. It's very much like learning to play a piano by the same twisted logic. > where is the manual for it even? Here: https://mpv.io/manual/ Linked from straight from the mpv homepage. Also linked from the github page. You can also read it here: https://github.com/mpv-player/mpv/blob/master/DOCS/man/mpv.r... Or you can read the local manpage on your computer using the manpage reader of your choice (I prefer KHelpCenter, but you can use `man` if you like that more...) If you have trouble finding the manpage, then you've definitely taken a wrong turn somewhere and should > What is the benefit of not having a right click menu The mpv psuedo-gui is drawn using the libass subtitle rendering library. There are advantages and disadvantages to this.
Read the rest
It's cross platform, so the same psuedo-gui code works the same on every platform (unlike the MacOS specific menu code.) It can be modified, extended, replaced or supplemented using Lua or JS user-scripts using the same libass techniques (the psuedo-gui mpv ships with is implemented as a builtin Lua script.) The biggest downsides to this are being limited to doing things subtitles can do (which doesn't include right-click menus) and the fundamental weirdness of using a subtitle library to render a GUI in the first place (personally I think it's endearing, but I acknowledge that it's weird.) > People who want to memorize keys for their media player? Is that not like a CLI user? No? Shortcut-focused GUIs and command line interfaces are not the same thing. Incidentally, mpv does have a embedded REPL if you do want to control it using a commandline interface. You can access it by pressing `. It is useful in some scenarios but you'll soon find it's a hell of a lot more convenient to use keyboard shortcuts instead. I virtually never use it except for testing when I'm writing mpv user-scripts. > but who do you recommend this player to? Only to people who are able and eager to hack on their media player. Suppose you want to control your media player from another application; vlc can support this with the telnet interface, but it's very limited and poorly documented. mpv's IPC interface is extremely powerful and well documented.
In The team that powers VLC (2019)
> unfortunately it's way too slow to get anywhere near 'realtime' output (30fps or better). That's not due to sixels. Check out the sixel nyan cat: https://github.com/hackerb9/sixvid Look at the FPS indicator in the bottom. It was pointed to me in https://github.com/microsoft/Terminal/issues/448#issuecommen... The issue may be in your code. I think I have similar performance issues, as the glyph selection process could be more optimized. Derasterized is mostly Jart work (who is best known here for her work on Cosmopolitan), we were mostly interested in quality. Reducing the set of glyph to something that could benefit from optimizations could help. > I really wish there was a decent pixel-framebuffer standard for terminals (with at least the same performance as ncurses) Sixel performance is quite decent: personally, I can play videos in m
Read the rest
y terminal. Try MPV on mintty: https://github.com/mpv-player/mpv/issues/2183 I have also played with a X server rendering over sixel, no performance issue: https://github.com/saitoha/xserver-SIXEL When sixel support is added to Windows Terminal, I may update it, because it would be fun to have one tab to run stuff!
In Show HN: Sixel-tmux displays graphics even if your terminal has no Sixel support
Is that even possible? This setlocale stuff is everywhere. Even basic functions like printf are affected. Reminds me of this incredible commit message: https://github.com/mpv-player/mpv/commit/1e70e82baa9193f6f02... I found it easier to get rid of libc and write freestanding C instead. Linux system calls have none of these problems. This locale bullshit is nowhere to be found. No global state anywhere. No thread-local errno. No stupid stuff like EOF. Writing C became fun again.
In Fun with Glibc and the Ctype.h Functions
>mpv has since implemented client side decorations. Yes eventually somebody implemented them, and they look like this: https://github.com/mpv-player/mpv/pull/7186 Needless to say, mpv prefers xdg-decoration if compositor supports it. >There aren't any zero code solutions It's zero-code for client if the compositor actually handled the border. And yes, compositor is the more likely component to actually have the foundation to do this kind of task.. I mean it is an _compositor_. >The idea I suggested is for the library to load the relevant kde and gtk symbols with dlopen, so there would not need to be multiple libraries Yes and hope those libraries actually implement stable ABI. SDL may do this, but it's actually a maintenance nightmare. If you actually go this way, it's better to have wrapper libraries that link to the actual libraries ins
Read the rest
tead and dlopen those wrapper libraries where you can ensure stable ABI. Though I also aren't really fan of shared libraries, but that's entirely different topic.
In Use Alacritty instead of Termite
What actually will happen is that those developers either will ignore gnome, force the application to run under xwayland if it detects mutter, or implement a really primitive decoration that will make users open bug reports "why is the decoration so weird?". They'll be taking similar stance as gnome devs and start telling users "it's not our bug", "report it to gnome devs". https://github.com/mpv-player/mpv/issues/3646 >SSD might be the approach used by other desktops, but it is not the only way to achieve this functionality, and it may not even be the simplest. Surely zero code in client is the "simplest". It also makes sure the decoration always works and behaves the same way in every application. It also won't stop working if the application freezes. Sure with a magical library that you managed to force on everyone at least the consist
Read the rest
ency and "not buggy" could be solved. But why is this necessary when others don't need it? And I surely don't want to see, libkde-decoration.so, libgnome-decoration.so, libwhatever-decoration.so Here is also very good technical writeup on CSDs from author of yet another display server, that's not wayland nor X11 https://arcan-fe.com/2018/01/27/argumenting-client-side-deco...
In Use Alacritty instead of Termite

Showing the 15 most recent of 16 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.