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, 7:02:26 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

22 sources
Usually playback will be locked to a hardware clock, typically the audio clock. This does mean that the audio clock and frame clock will drift over time, as they're not locked to each other; it doesn't matter how accurate the clocks are, they will drift. This is one source of dropped/doubled frames. It's possible to sync to the video framerate instead, of course, though audio desync artifacts tend to be more noticeable and objectionable than video ones. You can handle this by dynamically measuring the clock drift and variably resampling the audio, but this is relatively complicated and computationally expensive. Generally this type of drift isn't too noticeable, these clocks are usually well within 100ppm, which would result in 1 frame slip every few minutes. The issue with framerate mismatch is a fundamentally different one, in that it's
Read the rest
not a synchronization problem. It's the result of a non-integral ratio between display frames and playback frames, and exists regardless of clock source. So it's the harder of the two to deal with, and is worse in magnitude too at several slipped frames per minute with e.g. 29.976fps vs. 30fps. In the classical approach, this simply results in frames getting doubled or skipped, since it's not tracking the video rate at all, it just asks for the display to be updated at its frame-time, and the display system will either get a chance to show it or not. The slightly more refined approach is to play back at the closest integral ratio (e.g. play 29.976fps video at 30fps on a 60fps display), and resample the audio to match this new rate, but again this is computationally expensive and complicated. mpv team has a good writeup: https://github.com/mpv-player/mpv/wiki/Display-synchronizati...
In PipeWire 0.3.62
It's unfortunate, https://github.com/mpv-player/mpv/issues/8655#issuecomment-1...: > Youtube now throttles requests of more than 10MB at a time, yt-dlp works around it by making many requests of 10MB using Range HTTP headers (yt-dlp calls it the http-chunk-size), but ffmpeg which does the downloading for mpv doesn't support that yet. I want to change mpv or yt-dlp to support range-based video URLs (eg. appending &range=333999644-335298975&rn=5&rbuf=0 to URLs) which speed up stream seeking and probably eliminate throttling altogether, but I haven't taken the time to look into how to achieve it. For anyone interested, I have an open bug report at https://github.com/mpv-player/mpv/issues/10601, and have found https://satadalsengupta.github.io/docs/papers/2017_nossdav_y... describing these parameters.
In YouTube-dl has an interpreter for a subset of JavaScript in 870 lines of Python
I actually agree, but I got the sense that the company being mormon was meant to bias the reader of that comment towards thinking that the company was in the wrong. I hoped to drive the conversation past that prejudice by conceding and dismissing it rather than pushing back against it, because I felt that on this forum pushback would likely prompt a religious flamewar rather than a discussion about digital rental. Using EDL files to edit movies for my family is something I've actually done before. I think a superfluous sex scene is okay in most contexts, but when watching a movie with parents/grandparents it's generally too cringe for me and everybody else in the room. I used mpv's EDL functionality for this: https://github.com/mpv-player/mpv/blob/master/DOCS/edl-mpv.r...
In The Big [Censored] Theory
If you use jellyfin jellyfin-mpv-shim lets you play streams in mpv without worrying about transcoding. https://github.com/jellyfin/jellyfin-mpv-shim Other fun tricks If you use jaro instead of xdg-open you can make video links automatically open in mpv while regular web links open in your browser of choice. https://github.com/isamert/jaro If you use elfeed its nice to watch video entries in mpv without a side trip to the browser. Stolen from Prot somewhere or other. (defun prot/elfeed-mpv-dwim () "Play entry link with external `mpv' program. When there is an audio enclosure (podcast), play just the audio. Else spawn a video player at a resolution that accounts for the current monitor's width." (interactive) (let\* ((entry (if (eq major-mode 'elfeed-show-mode) elfeed-show-entry (elfeed-search-selected :ignore-region)))
Read the rest
(link (elfeed-entry-link entry)) (enclosure (elt (car (elfeed-entry-enclosures entry)) 0)) ; fragile? (audio "") ;; Here the display width checks if I am on the laptop (height (if (<= (display-pixel-width ) 1366) 720 1080)) (video (format "--ytdl-format=bestvideo[height<=?%s]+bestaudio/best" height)) ;; (buf (pop-to-buffer "*elfeed-mpv-output*")) ) (run-hooks 'prot/elfeed-mpv-hook) (if enclosure ; make this its own parametrised function (progn (start-process "f fuckoff audio-mpv" nil "mpv" enclosure) (message (concat "Launching MPV for " (propertize enclosure 'face 'success)))) (start-process "f fuckoff video-mpv" nil "mpv" video link) (message (concat "Launching MPV for " (propertize link 'face 'success)))))) At one point I wrote script to prompt for a name if passed more than one argument and create a playlist and remember the last n playlists and regular files opened so you could in turn pull up this list and narrow with rofi but as of late I'm just adding videos to jellyfin. Umpv is a script that emulates single instance mode whereby arguments are simply pushed to the existing players playlist instead of opening a new player. https://github.com/mpv-player/mpv/blob/master/TOOLS/umpv
In Mpv – A free, open source, and cross-platform media player
> Gnome's Wayland implementation is much better then KDE at this moment Agreed, with a caveat— Gnome's Mutter compositor for Wayland has bugs. It does not support server side rendered window decorations while KDE does. This means that the title bars for Alacritty[0] terminal emulator and the mpv[1] video player are ugly and not so functional. This is an intentional decision by the GNOME team[2]. Also the screen locks while watching videos on mpv because Mutter does not support the idle-inhibit protocol, although work is currently being done on this[3]. [0]: https://github.com/alacritty/alacritty/issues/5956 [1]: https://github.com/mpv-player/mpv/pull/7186 [2]: https://gitlab.gnome.org/GNOME/mutter/-/issues/217 [3]: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/111
In Plasma 5.25

Showing the 15 most recent of 22 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.