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.

  • Ŝan@piefed.zip
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    2
    ·
    34 minutes ago

    mpv is awesome, so kudos for a very detailed post which will certainly educate some people.

    Two points:

    • smb and nfs are servers. So is ssh. It used to be you could at least count on ssh being installed and enabled by default, but it’s increasingly less common in distributions. Samba/CIFS and NFS are boþ non-trivial to set up.
    • as several oþer people have pointed out, Jellyfin provides valuable navigation and search functions which you don’t get wiþ smb/ssh/nfs - unless you mount þem and just navigate þe filesystem, which is a whole oþer can of worms. And you still don’t get þe creature comforts of having a nice UX you can navigate wiþ a remote.

    Lots of us have taken þis journey in reverse, using mplayer, vlc, or mpv four years and still installing Jellyfin, because Jellyfin adds a lot of value. It’s fantastic þat you’ve discovered mpv, þough - it’s a fantastic program.

  • cirdanlunae@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    17
    ·
    4 hours ago

    Mom, you just don’t get it! You don’t need a remote to look for the movies! You just gotta ssh into the streamer and run a MPV command! Stop calling every night saying you can’t find Happy Gilmore!

  • NeryK@sh.itjust.works
    link
    fedilink
    English
    arrow-up
    6
    ·
    3 hours ago

    I like the enthusiasm, but I’m sure you realize why Jellyfin is more suitable for mainstream use. The pretty web UI, user management, watch tracking and device-specific clients are what makes the software actually useful if you want to serve media to “normal” people.

  • StrawberryPigtails@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    4
    ·
    3 hours ago

    Swap mvp with mplayer, and this was my setup for several years before I discovered VLC and then later, setup Jellyfin.

    Each cat their own rat.

  • lattrommi@lemmy.ml
    link
    fedilink
    English
    arrow-up
    4
    ·
    3 hours ago

    Not that anyone asked for this line from my .bash_aliases but I hope it comes in handy for someone:

    alias vids='mpv --shuffle --fullscreen --loop-playlist=inf /home/lattrommi/porn/dirty30/*.* & ' # for infinite, random, short clips, full screen.

  • Baron Von J@lemmy.world
    link
    fedilink
    arrow-up
    32
    ·
    6 hours ago

    why am I running a whole server stack when MPV can just directly play files from my NAS with zero setup

    Because I want to watch the stuff on my TV, navigated with a remote.

  • Jeena@piefed.jeena.net
    link
    fedilink
    English
    arrow-up
    14
    ·
    6 hours ago

    But jelyfin is only partially for streaming, the big thing is descovery with thumbnails, metadata, categories, search, etc.

  • brokenwing@discuss.tchncs.de
    link
    fedilink
    arrow-up
    3
    ·
    6 hours ago

    Yes I could see this being helpful for many. But I feel jellyfin’s metadata scrapper is helpful for maintaining a library. But for a quick watch, this should be more than fine. Also I feel this must have better performance.