The other day someone was complaining about the new ad blocker-blocker on YouTube and I mentioned that it might be fun to write a Firefox extension that would just load up yt-dlp
and play the video through mpv
.
It turns out, writing a Firefox extension is easy and tricking Firefox into launching yt-dlp
isn’t much harder (though it does require some annoying configuration on the user’s end).
Anyway, if you’re a Linux user, feel free to try it out. I don’t know how much I’m going to pour into this, but as an exercise of “can this be done”, it was pretty good for a few hours on a Friday night.
Additional pro-tip: you can just launch mpv from the terminal using the YouTube url and it will open a new player.
This is sweet, this exact same idea has been kicking around my head for awhile but I’ve never taken the initiative.
I did write a script (powershell lol), that uses yt-dlp to download all your subscription videos as they come in and sends a notification. Could easily be modified to work on linux and use ntfy or another notification service. ALso no need to scrape your subscriptions as it stays in sync with your currently subscribed channels.
Thank you for your work, but why not just use ff2mpv?
Honestly, because I didn’t know (a) that ff2mpv even existed, or that (b) mpv could play YouTube URLs directly. So thanks! I learnt two things today :-)
It was still a fun project though 'cause I learnt how to write a Firefox extension and get the browser to launch programs on-click, so not a waste of time!
can you please share a video of how it looks like when implemented. I think it is already possible to watch videos using VLC ?
I’ve had a couple videos that wouldn’t load properly in VLC. Rare, but it happens. Alternatives are always welcome.
I don’t think I have it in me to put together a video, but I can describe it if you like.
Once you install the extension and follow the setup instructions, you just go to a YouTube page. The extension adds an ugly button to the top-left of the page that says “bypass”. When you click it, Firefox launches
yt-dlp [the URL you're at] -o - | mpv -
which basically just downloads the video and streams the output through thempv
video player. So now you’re watching just the video, with no web page necessary.My best guess would be that the internal player of Firefox comes to play here.
You can try opening any MP4 with Firefox
You are the best.
I was curious how you implemented this as it’s pretty much the default YT bypass qutebrowser users use. Then I read the MIME type addition you did and had a good laugh. That’s clever. Always nice to see a fellow Go user, too.
Is there another way to do this? This hack was the only way I could figure out how to get Firefox to invoke an external binary, but if there’s a more conventional way to do it, I’d like to know 'cause I have another more complicated project in need of a pattern much like this one.
No, the way you did it is the only way I can think you can. Otherwise it opens up things to arbitrary code execution. I’m not exactly sure how qutebrowser gets away with it, but I know it’s built on QT so maybe it just isn’t running sandboxed or had some special method for calling external binaries/scripts. You might take a look at that project and see, but Firefox/qutebrowser is probably like comparing apples and oranges.
That’s actually very helpful, thanks. I’ve been working on another project to open certain URLs in specific browsers/profiles, and wanted to be sure that I wasn’t missing a more obvious design pattern. The project is here if you’re curious.
@danielquinn Outstanding work. Congrats!
Thanks!
Awesome! Thanks!
What is MPV?
It’s a powerful video player in Linuxland.
Great username, btw.