Video playback using mpv
This guide will show you how to install the
mpv player and use it with maximum performance (in own tests I saw video performance improvements of up to 600% !). It will assume that you are using debian-12 as a template (other templates should also work, however) and that you play videos in DVMs; I recommend looking into this solution for caching disposables to decrease startup time. I also recommend looking into one of these solutions to have files, including video files, always start in DVMs if you “open” them in your file manager.
Since not everyone is interested in YouTube and the YouTube solution presented here is admittedly a bit unpolished due to bugs in
mpv as well as insufficiently up-to-date packages in debian stable, I will present separately the necessary steps to set up
mpv for local video playback only and
mpv with ytfzf, which basically lets you search for YouTube videos using the Invidious API and then stream them without having to actually launch a browser; it’s also compatible with Peertube and Odysee.
In your base template
debian-12 template run:
sudo apt install mpv
For (additional) YouTube functionality run instead:
sudo apt install mpv fzf make sudo apt remove yt-dlp
yt-dlp is probably going to get installed together with mpv, but if you’re using Debian it will be a very old version that won’t work, so we’ll have to install a newer one by ourselves (see further down).
In both cases (YouTube or not) we proceed to set
mpv to use a certain configuration, which will drastically improve playback performance:
sudo vi /etc/mpv/mpv.conf
Add the following to the file (press
i to edit):
Save your changes (press
Esc and enter
:x and press
Enter) and shut down the template. This completes the guide for those who don’t care about YouTube. Enjoy much improved video playback performance!
In your DVM template (YouTube)
First download the latest version of
yt-dlp from here in some Internet-connected DVM or AppVM (choose the
yt-dlp_linux file and verify the checksum after downloading just in case; you can also verify the pgp signature on it if you want to be maximally secure; in that case you may want to create a separate dvm template to do the following in); then copy this file to your
debian-12-dvm disposable template run (we’ll assume that you copied from myAppVm):
chmod +x QubesIncoming/myAppVm/yt-dlp_linux sudo mv QubesIncoming/myAppVm/yt-dlp_linux /usr/local/bin/yt-dlp rmdir -p QubesIncoming/myAppVm/
Then create a new file:
Into this file copy the following (copy this code into that VM’s clipboard and then into Vim, e.g. by using your terminal’s paste functionality, e.g. Edit - Paste in the menu):
#!/bin/bash echo -e "GET http://github.com HTTP/1.0\n\n" | nc github.com 80 > /dev/null 2>&1 if [ $? -eq 0 ]; then sudo yt-dlp -U && cd ~/Downloads && rm -rf ytfzf && git clone https://github.com/pystardust/ytfzf && cd ytfzf && sudo make install doc else echo "No internet connection or cannot reach github.com!" fi
Make the script executable and run it once:
chmod +x update-yt-dlp-and-ytfzf.sh ./update-yt-dlp-and-ytfzf.sh
The above script will install the latest version of
ytfzf as well as update
yt-dlp. You should periodically run this script to update both
ytfzf. Run in the dvm-template for persistence or in the DVM itself on every start of that DVM.
Now shut down your dvm-template and don’t forget to set its netvm to None if that was the prior setting (e.g. if you only use web-connected named DVMs based on it).
Congratulations! You have completed the guide and can now watch both local videos as well as YouTube videos with probably the best possible performance in QubesOS despite lacking GPU acceleration!
Addendum: a short ytfzf tutorial
You can use
ytfzf simply like this:
ytfzf videos I like to watch (use a maximized terminal). Then select one of the titles with the up/down arrow keys and press
Enter to play it. Launching with the
-l option is useful as
ytfzf will return to the list of videos found after playing a video. Useful keyboard shortcuts:
Alt+Ddownloads the video instead of playing it (you can then play it with
Alt+Flists available formats (e.g. 1080p) for that video (you can then select a format and play it with
Alt+Elaunches the video in
mpvas a detached process, which works best with the
-loption as it retains the selection screen while the video is playing
Ctrl+Ploads the next page of videos (the next 20 video titles by default)
Ctrl+Cexits the program
See the man page (
man ytfzf) for more controls and options, but note that good looking thumbnails (option
-t) either need additional non-standard-repo packages to be installed so they can be displayed in the terminal itself or will be displayed in a separate window: the only way I’ve gotten them to work acceptably on my machine (and without installing additional packages) is by using:
-lt -T mpv --preview-side=down as options and then usually I have to
Ctrl+P once to fix misalignment of the infos (this bug has been fixed for the next version). One can automatically apply these options by setting an alias in the
.bashrc file of the dvm template:
alias ytfzf='ytfzf -lt -T mpv --preview-side=down'
The next version (after 2.6.1) will allow getting rid of the preview panel altogether by using the following alias instead of the one above (that setting can also be put into
alias ytfzf='preview_window_width=0% ytfzf -lt -T mpv'
To launch the ytfzf program even more quickly with better configured thumbnails, use a cached, named, networked DVM; find out the size the terminal window should have such that the separate thumbnail still fully fits on screen (e.g. by launching
ytfzf -t -T mpv video and positioning the thumbnail window next to the terminal window while resizing the terminal window and noting the final size down); you may also have to go to the Window Manager Tweaks app of your QubesOS installation and in the tab “Placement” move the slider further left until the window manager automatically places the thumbnail window in the “free space” of the workspace when created.
Then in your DVM’s dvm template run:
sudo mkdir -p /usr/local/share/applications sudo vi /usr/local/share/applications/ytfzf.desktop
In this file put the following (replace the geometry values with your recorded values and either remove the --ytdl-pref option or customize it for your needs; the one you see there basically tries to pick the best video and audio combination available that does not exceed 1080p and that is not HDR when you launch without
Alt+F, e.g. with
[Desktop Entry] Type=Application Name=YouTube FzF Comment=Watch YouTube videos without a browser Icon=mpv Exec=gnome-terminal --title=YTFzF --geometry=211x29 -- ytfzf -lts -T mpv --preview-side=down --ytdl-pref='ba+bv[height<=?1080][dynamic_range=?SDR]/b[height<=?1080][dynamic_range=?SDR]' %U Terminal=true Categories=AudioVideo;Audio;Video;Player;TV; Keywords=youtube;ytfzf;yt-dlp;
Save and exit (
:x) and shut down the dvm template. Now open your Qubes Manager and edit the settings of your named DVM based on that template:
- Go to the “Applications” tab
- Press “Refresh Applications” and wait for the process to complete
- Find YouTube FzF in the left list at the bottom and push it over to the right list using the
- Press OK
Done! From now on you can instantly launch a YT search by pressing
Alt+F3 and typing
ytf and hitting
Enter; it will pop up the correctly sized terminal of your cached DVM with a search prompt ready; the thumbnail window will automatically be placed in a useful way and the videos you stream will have the format restrictions listed in the desktop file.