Version 1.2
A self-contained script (Windows and Linux) that downloads YouTube videos at their true native quality, instead of the capped, lower-quality file YouTube's own "download" would normally give you. It works by fetching video and audio as separate high-quality streams and merging them together with ffmpeg — or keeping them as separate files, your choice.
No installer, nothing permanently added to your system beyond what you explicitly choose. Everything it needs lives in two plain folders sitting right next to the script.
There are two separate, independent versions of the script — pick the one for your system:
- You double-click
YouTube_Hunter.bat. - The very first time you run it, it downloads two small free tools it depends on — yt-dlp (does the actual downloading) and ffmpeg (merges video and audio together) — into a folder called
YouTube Hunter Bin, created next to the script. How long that takes depends entirely on GitHub's and gyan.dev's own servers and your connection, not on this script — it can be instant or take a few minutes and look stuck; that's normal, just let it finish. It only happens once; every run after that skips straight to the menu. If one of those two tools is ever missing or gets corrupted, it quietly fetches just that one again next time you run it — you don't need to do anything. - It asks you to paste a YouTube link.
- It shows you a menu (see below) — pick what you want with a single key press.
- It downloads, and tells you when it's done.
- The finished file lands in a folder called
YouTube Hunter Downloads, also created next to the script.
YouTube_Hunter.bat
YouTube Hunter Bin\ <- yt-dlp and ffmpeg live here, don't touch it
YouTube Hunter Downloads\ <- your finished videos/audio/thumbnails end up here
- Windows.
- An internet connection (for the one-time setup and for each download).
- You run
./YouTube_Hunter.shfrom a terminal (chmod +x YouTube_Hunter.shonce, the first time, if it isn't already executable). - The first time, it checks whether
yt-dlpandffmpegare already installed and working on your system. If they are, it uses them directly — nothing is downloaded, nothing is asked. If they aren't, it asks you to choose: install them through your system's own package manager (apt,dnf,pacman,zypperorapk, whichever you have — this will ask forsudo), or download private, self-contained copies into aYouTube Hunter Binfolder next to the script, touching nothing else on your system. Either way, your choice is remembered for next time, but it's re-checked (and quietly repaired if something's missing or broken) on every run. - From here on it works exactly like the Windows version: paste a link, pick from the menu, get your file in
YouTube Hunter Downloads.
YouTube_Hunter.sh
YouTube Hunter Bin/ <- only created if you chose the self-contained option
YouTube Hunter Downloads/ <- your finished videos/audio/thumbnails end up here
- Linux with bash 4.0 or newer (virtually any current distribution).
- An internet connection (for the one-time setup, if needed, and for each download).
Everything below applies the same way to both versions.
- Best Quality Video & Audio — the best available video and audio, merged into one file or kept as two independent files (you're asked which).
- Best Quality Video & Audio + Thumbnail — same as above, plus the video's thumbnail image.
- Audio only — the best available audio track, exactly as YouTube provides it.
- Audio only + Thumbnail — same as above, plus the thumbnail.
- Video only — the best available video, no sound.
- Video only + Thumbnail — same as above, plus the thumbnail.
- Editing-friendly (H.264 + AAC) — video and audio picked in a format most video editors accept without re-encoding, merged into one file or kept as two independent files (you're asked which).
- Editing-friendly + Thumbnail — same as above, plus the thumbnail.
- Customize all Options — shows every format yt-dlp reports for that specific video and lets you pick an exact video quality and/or an exact audio quality yourself. Either side can be skipped (audio-only or video-only), the thumbnail can be added to the audio pick, and if you pick both you're asked whether to merge them into one file or keep them separate.
- Thumbnail only — just the thumbnail image, no video or audio.
- Quit
Audio and video are never re-encoded, in any option. Every download is saved from the exact same compressed stream YouTube provides — no forced conversion, so no quality is ever added or lost. For YouTube that's very often .webm (VP9/AV1 video, Opus audio), sometimes .mp4/.m4a, depending on what's genuinely the best track for that specific video. The one exception is purely cosmetic: a video-only or audio-only stream that would otherwise save as the ambiguous .webm (YouTube uses it for both) is automatically repackaged — not re-encoded — into .mkv (video) or .opus (audio) instead, so the file type is obvious at a glance, exactly like the merged download's .mkv already is. This is a true remux (ffmpeg's stream copy): the exact same compressed data, in a clearer box, confirmed byte-for-byte identical to the original.
File names are unambiguous, and never collide. A file that only has video, or only has audio, never shares a plain, untagged name with anything else:
- Downloaded together as independent files (from "Best Quality"/"Editing-friendly" → independent files, or "Customize all Options" picking both) — tagged
(video)/(audio). - Downloaded standalone, with nothing else from the same run ("Video only", "Audio only", or "Customize all Options" picking just one side) — tagged
(video only)/(audio only). This is a deliberately different tag from the one above, so a standalone video-only file can never be confused with, or collide with, a paired(video)file or a later complete merged download of the same video. - The merged, complete video+audio file keeps the plain title, with no tag.
- Colored menus and format tables, for readability.
- Downloading the same video/quality again never overwrites the previous file — it gets " (1)", " (2)" and so on appended to the name, the same way a browser handles a repeat download.
- After a download finishes, "Download more from this link" lets you immediately pick another option for the same video, without pasting or re-validating the link again. It's the first option on the post-download menu, ahead of "Download another link" and "Exit".
- If a download fails (connection drops, disk fills up mid-download, etc.), yt-dlp's own error is shown, and nothing already downloaded successfully before that point is touched or lost. yt-dlp resumes an interrupted download on the next attempt instead of starting over, where possible. The script also does a best-effort check of your free disk space and internet connection at that point and adds a hint if either looks like the likely cause — it's a heuristic, not a certain diagnosis, so yt-dlp's own error message is always the most exact source of truth.
- yt-dlp and ffmpeg are separate, independent projects fetched at runtime — they are not bundled with this script and keep their own licenses (yt-dlp's released binaries and the ffmpeg builds used here are GPLv3; see their own project pages for details).
- You are responsible for complying with YouTube's Terms of Service and with the copyright of whatever you download. This tool does not grant any rights over downloaded content.
- Video-only and audio-only downloads that would save as the ambiguous
.webmare now automatically remuxed (no re-encoding, no quality loss) into.mkv(video) or.opus(audio), so the file type is obvious at a glance. - Independent video/audio files are now clearly tagged in their file name —
(video)/(audio)when downloaded together,(video only)/(audio only)when downloaded standalone — so they can never be confused with each other or with a complete merged download. - New "Download more from this link" option after a download finishes, to keep picking download options for the same video without re-entering the link.
Created by YoRHa Numberless
- GitHub: github.com/YorhaNumberless
- BlueSky: @yorhanumberless.bsky.social
- YouTube: youtube.com/@YoRHaNumberless
- Twitch: twitch.tv/yorha_numberless
- Discord: yorhanumberless