cross-posted from: https://lemdro.id/post/31558391

TL;DR: Stop running a Jellyfin server. MPV can directly play anything from your NAS, stream YouTube ad-free, handle literally every codec, and is infinitely customizable. It’s like vim for video.

Why I ditched my Jellyfin setup

I used to run Jellyfin on my NAS. Transcoding, web interface, the works. Then I realized… why am I running a whole server stack when MPV can just directly play files from my NAS with zero setup?

What MPV Actually Is

MPV is a command-line video player that plays literally everything. But it’s way more than that - it’s a video engine you can build workflows around.

The Basics That Blow Minds

Direct NAS streaming (zero server needed):

mpv smb://192.168.1.100/media/movies/whatever.mkv
mpv nfs://nas.local/shows/season1/*

No transcoding. No server. No web interface overhead. Just direct file access with perfect quality and zero latency.

YouTube (and 1000+ sites) with ZERO ads:

brew install yt-dlp
mpv "https://youtube.com/watch?v..."

That’s it. Ad-free YouTube in your video player with all your custom keybinds. Works with Twitch, Vimeo, Twitter, Reddit, literally hundreds of sites via yt-dlp.

Play entire directories:

mpv /Volumes/NAS/shows/BreakingBad/Season1/*

Boom. Instant binge session. Space bar skips to next episode. No library scanning, no metadata scraping, just files.

Workflows That Changed My Life

1. The “Watch Anywhere” Setup

Mount your NAS shares in Finder (or /etc/fstab for auto-mount). Now MPV treats your entire media library like local files. Add this to your shell config:

alias play="mpv"
alias tv="mpv /Volumes/NAS/shows/"
alias movies="mpv /Volumes/NAS/movies/"

2. YouTube as Your Streaming Service

alias yt="mpv"
alias ytm="mpv --no-video"  # audio only for music

Now:

  • yt "youtube-url" = instant ad-free playback
  • ytm "youtube-playlist" = whole playlists as audio
  • Keep your YouTube history/recommendations in browser, watch in MPV

3. Picture-in-Picture for Anything

Add ontop=yes to config, resize window small = instant PiP for any video source while you work. Works with live streams, security cameras, whatever.

4. The “No Plex Shares Needed” Share

Send someone an SMB/NFS share to your media. They install MPV. They can now browse and play your media library like it’s local. No Plex accounts, no streaming limits, no transcoding quality loss.

5. Live Stream Monitoring

mpv http://192.168.1.50:8080/stream.m3u8

Home security cameras, baby monitors, anything streaming HLS/RTMP = instant monitoring with keybind controls.

Customization That Makes Jellyfin Look Basic

My Config (vim-style keybinds + YouTube controls)

Saved as ~/.config/mpv/mpv.conf:

input-default-bindings=no

> add speed 0.1
< add speed -0.1
j seek -10
k cycle pause
l seek 10
LEFT seek -5
RIGHT seek 5
UP add volume 5
DOWN add volume -5
. frame-step
, frame-back-step

m cycle mute
f cycle fullscreen
s cycle sub
a cycle audio
0 seek 0 absolute-percent
1 seek 10 absolute-percent
2 seek 20 absolute-percent
3 seek 30 absolute-percent
4 seek 40 absolute-percent
5 seek 50 absolute-percent
6 seek 60 absolute-percent
7 seek 70 absolute-percent
8 seek 80 absolute-percent
9 seek 90 absolute-percent

[ add speed -0.25
] add speed 0.25
SPACE cycle pause
ESC set fullscreen no

i script-binding stats/display-stats
S screenshot video

profile=gpu-hq
scale=ewa_lanczossharp
cscale=ewa_lanczossharp
hwdec=auto-safe
vo=gpu

screenshot-format=png
screenshot-png-compression=9
screenshot-directory=~/Downloads

cache=yes
demuxer-max-bytes=150M

osd-level=1
osd-duration=2000
save-position-on-quit=yes
keep-open=yes
alang=jpn,jp,eng,en
slang=eng,en

ytdl-format=bestvideo[height<=1080]+bestaudio/best

Profiles for Different Content

[anime]
profile-desc="Anime settings"
deband=yes

[lowpower]
profile-desc="Laptop battery mode"
profile=fast
hwdec=yes

Use with: mpv --profile=anime episode.mkv

Scripts That Make It Insane

MPV supports Lua/JS scripts. Drop them in ~/.config/mpv/scripts/ and they just work.

Must-have scripts:

  1. sponsorblock - Auto-skips YouTube sponsors/intros/outros

    curl -o ~/.config/mpv/scripts/sponsorblock.lua \
      https://raw.githubusercontent.com/po5/mpv_sponsorblock/master/sponsorblock.lua
    
  2. quality-menu - Change YouTube quality on the fly

  3. autosubsync - Auto-fixes subtitle timing

  4. playlistmanager - Visual playlist editor

  5. mpv-discordRPC - Show what you’re watching on Discord

Advanced Workflows

Watch Parties (Syncplay)

Install syncplay, point it at MPV, now you and friends watch your NAS content together in perfect sync. No Plex share limits, no quality loss.

Audio Streaming

ytm "youtube-playlist-url"
# or
mpv --no-video /Volumes/NAS/music/*

No GUI needed. Terminal command plays audio, you use keybinds (k=pause, j/l=skip, etc). Or just minimize and use as background music player.

For GUI: IINA (Mac) is literally just MPV with a pretty interface and uses your MPV config.

Frame-by-Frame Analysis

Built-in keybinds (. and , in my config) step forward/back frame-by-frame. Perfect for animation analysis, sports breakdown, debugging video issues.

Automated Workflows

# Watch anything in clipboard
mpv $(pbpaste)

# Random episode
mpv "$(find /Volumes/NAS/shows -name "*.mkv" | shuf -n1)"

# Continue last watched (auto position restore)
mpv /Volumes/NAS/shows/CurrentShow/*

Why This Beats Jellyfin For Me

Pros:

  • Zero server maintenance
  • No transcoding = perfect quality
  • Plays literally any codec without setup
  • Way faster (direct file access)
  • Keyboard-driven workflow
  • Works offline/online seamlessly
  • Infinitely scriptable
  • Cross-platform (Linux/Mac/Windows)

Cons:

  • No pretty web UI (I consider this a pro)
  • No user management (just use OS permissions)
  • No watch tracking (unless you script it)
  • No mobile app (VLC on phone + SMB works though)

Who This Is For

  • You’re comfortable with terminal/config files
  • You want maximum quality (no transcoding ever)
  • You prefer keyboard controls
  • You value simplicity over features
  • You already have a NAS/file server
  • You want YouTube ad-free without browser extensions

Getting Started

# macOS
brew install mpv yt-dlp

# Linux
sudo apt install mpv yt-dlp

# Windows
scoop install mpv yt-dlp

Create config at:

  • Mac/Linux: ~/.config/mpv/mpv.conf
  • Windows: %APPDATA%/mpv/mpv.conf

Mount your NAS shares, point MPV at files. Done.

Resources


EDIT: Holy shit, didn’t expect this response. Common questions:

Q: But I need to share with family who aren’t technical A: IINA (Mac) or mpv.net (Windows) give them a normal GUI that uses MPV underneath. Or just… teach them? play movie.mkv isn’t rocket science.

Q: What about mobile? A: VLC on phone + SMB share to your NAS. Or just use MPV on desktop/laptop like a civilized person.

Q: No watch history tracking? A: save-position-on-quit=yes remembers position per file. For tracking across devices, write a simple script or just… remember what you watched?

Q: This sounds like gatekeeping A: It’s literally a config file. If you can set up Jellyfin, you can handle this.

  • richmondez@lemdro.id
    link
    fedilink
    English
    arrow-up
    32
    arrow-down
    1
    ·
    9 hours ago

    That was a long winded way of saying you don’t know what Jellyfin actually is or does. Mpv is a client, it only fills the role that the various Jellyfin clients perform and a better comparison would be against a heavier weight media player such as Kodi.

    What you suggest works well enough if you have a reliable network link to share CIFS or NFS over, but what do you do when away from home on a rubbish link that doesn’t have bandwidth to stream all your high quality bluray rips? You want transcoding in that situation.

    Also, I’m a seasoned Unix sysadmin who knows his way around the cli and I can say with certainty this isn’t for people who know the cli, it’s for people who just want to prove you can do anything from the cli even if suboptimal.

  • dbtng@eviltoast.org
    link
    fedilink
    English
    arrow-up
    26
    arrow-down
    2
    ·
    11 hours ago

    This was painful to read. Yuck. It was written like clickbait. Like AI writes. Yuck.
    And of course it was crossposted. If you’ve got something you need everyone to know, you gotta crosspost it everywhere.

      • dbtng@eviltoast.org
        link
        fedilink
        English
        arrow-up
        1
        ·
        3 hours ago

        I just reviewed the post again. It’s a stellar example of modern writing trends.

        Read this:
        Ultimate Blow Minds Change My Life Your Anything Basic Insane Advanced

        Don’t you feel kinda gross now?

  • acosmichippo@lemmy.world
    link
    fedilink
    English
    arrow-up
    33
    ·
    edit-2
    14 hours ago

    you are way overthinking it my friend. running a docker container for jellyfin is not a big deal and requires virtually no maintenance. lots of QOL improvements too like tracking watched status, playlists, metadata, clients that run on an actual television, etc, etc.

    • Twinklebreeze @lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      6 hours ago

      The watched status is reason enough for me to use it. Having to remember what episode you watched last for 4+ shows at a time is annoying.

  • ImgurRefugee114@reddthat.com
    link
    fedilink
    English
    arrow-up
    11
    ·
    12 hours ago

    I dailydrive a heavily configured MPV and I’ve got a lot of complaints about jellyfin, but this is a no-go for sharing for the vast majority of people.

  • Em Adespoton@lemmy.ca
    link
    fedilink
    English
    arrow-up
    29
    ·
    15 hours ago

    I’m still trying to figure out why I should stop running a jellyfin server. It does all this too, and I just had to deploy a docker container and point it at my NAS.

      • Em Adespoton@lemmy.ca
        link
        fedilink
        English
        arrow-up
        2
        ·
        5 hours ago

        OK, you’re saying that deploying a docker container is too difficult, but somehow MPV assembly from the command line isn’t?

        My point was, why should people be abandoning Jellyfin for MPV when there’s no observable gain in features or functionality, and it’s significantly more complicated to set up?

        • Jerkface (any/all)@lemmy.ca
          link
          fedilink
          English
          arrow-up
          1
          ·
          5 hours ago

          Ding ding ding, got it in one. I also can’t be arsed to learn how sausages are made, because I can tell from here that they are not for me.

  • bjorney@lemmy.ca
    link
    fedilink
    English
    arrow-up
    70
    ·
    18 hours ago

    Or just… teach them? play movie.mkv isn’t rocket science.

    Instructions on how to switch to HDMI 1 are currently taped to the back of my mom’s TV remote

      • brsrklf@jlai.lu
        link
        fedilink
        English
        arrow-up
        10
        ·
        7 hours ago

        Most remote design is honestly atrocious. Somehow they keep hiding “source” in random spots, when it should be one of the most important buttons. The obscure pictograms are all over the place, and most buttons will never be used by anyone.

        • Peffse@lemmy.world
          link
          fedilink
          English
          arrow-up
          3
          ·
          2 hours ago

          One of my favorite remotes had the sources split across the top. Composite, Component, VGA, HDMI. And if you hit the button twice it’d cycle through the different ports of that type.

          Never found a remote like that again. Now they just throw a menu to slowly browse through.

          • brsrklf@jlai.lu
            link
            fedilink
            English
            arrow-up
            1
            ·
            edit-2
            3 minutes ago

            My parent’s TV is absolutely terrible, and the source menu is a big part of it.

            It doesn’t show sources that have not sent any input since the TV was turned on. So when trying to get the Switch on it, I’d need to start the console first, then push the source button… and the menu is so slow to appear that the Switch has gone back to sleep mode before I can reach it…

  • deranger@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    49
    arrow-down
    1
    ·
    17 hours ago
    1. The “No Plex Shares Needed” Share

    Send someone an SMB/NFS share to your media. They install MPV. They can now browse and play your media library like it’s local. No Plex accounts, no streaming limits, no transcoding quality loss.

    Yeah, that’s not tenable for anyone but the nerdiest users. None of my users know what an SMB share is. They know Plex is the icon they click on to watch the movies I get them.

    I’m glad this exists but the Netflix-like experience Plex offers is key to adoption by normal people. Aside from the yt-dlp integration, it sounds like DLNA sharing via PMS or XBMC from way back.

    • ragepaw@lemmy.ca
      link
      fedilink
      English
      arrow-up
      4
      ·
      5 hours ago

      I have a buddy who won’t switch his streaming box because he thinks his in-laws will be too confused by a different button layout on the remote.

  • Chronographs@lemmy.zip
    link
    fedilink
    English
    arrow-up
    12
    ·
    16 hours ago

    You know that mpv is what plex actually uses to play the content right? At least on desktop. A lot of my users (almost all actually) are watching things via the smart tv app or their phones/tablets etc. Watch states are tracked between them and for the most part it just works.

  • tidderuuf@lemmy.world
    link
    fedilink
    English
    arrow-up
    11
    arrow-down
    3
    ·
    16 hours ago

    Who This Is For

    • You’re comfortable with terminal/config files

    Aaand I’m out. It looked fun until I got to all the work I would need to do.

    • fernandofig@reddthat.com
      link
      fedilink
      English
      arrow-up
      8
      ·
      edit-2
      5 hours ago

      I’m comfortable with the terminal and messing around with config files.

      I still rolled my eyes at how the user seem to have no understanding of what’s the actual convenience that Plex/jellyfin provides. Hint: playing/streaming videos is the least of them.

  • Tehdastehdas@piefed.social
    link
    fedilink
    English
    arrow-up
    3
    ·
    15 hours ago

    MPV lacks a graphical user interface so I have to keep the hotkey list open to use it. Normally I use VLC but it can’t play some files right.

    • ImgurRefugee114@reddthat.com
      link
      fedilink
      English
      arrow-up
      4
      ·
      edit-2
      12 hours ago

      Edit the config to unbind all defaults, and define your own keybinds as you need them, using what’s most intuitive for you. Helps building memory.

      Or you can just use one if the plethora of guis…

  • solrize@lemmy.ml
    link
    fedilink
    English
    arrow-up
    5
    ·
    18 hours ago

    Looks cool, but it sounds like yt-dlp may be about to break? Someone posted a screen shot of youtube.com with a recaptcha on the screen. If that can’t be bypassed, it was just a matter of time.

    • A_norny_mousse@feddit.org
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      11 hours ago

      [ tl;dr: yt-dlp has been working nicely on this setup. For many years. ]

      Every alternative youtube frontend that doesn’t use its API is always about to break because that’s the game youtube has been playing for years.

      However, if it has enough users and contributors, it always gets fixed promptly. yt-dlp has enough users and contributors.

      Someone posted a screen shot of youtube.com with a recaptcha on the screen.

      Not even sure what you’re refering to; the whole point of yt-dlp is that you don’t use the web ui.

    • mudkip@lemdro.idOP
      link
      fedilink
      English
      arrow-up
      3
      ·
      18 hours ago

      I bet the yt-dlp team will find a solution very quickly. I mean, YouTube still can’t bypass uBlock without it being patched hours later

      • solrize@lemmy.ml
        link
        fedilink
        English
        arrow-up
        8
        arrow-down
        2
        ·
        17 hours ago

        Youtube up til now has resisted using something as brutal as an on-screen recaptcha, because of the friction that creates for regular users. If they’ve finally gone that route, it seems difficult to fix with simple automation.