Repository: yt-dlp
Issue: Support per-URL options; options that only apply for specific URLs when providing a list of URLs
Labels: enhancement,triage

### DO NOT REMOVE OR SKIP THE ISSUE TEMPLATE

- [X] I understand that I will be **blocked** if I *intentionally* remove or skip any mandatory\* field

### Checklist

- [X] I'm requesting a feature unrelated to a specific site
- [X] I've looked through the [README](https://github.com/yt-dlp/yt-dlp#readme)
- [X] I've verified that I'm running yt-dlp version **2023.10.13** ([update instructions](https://github.com/yt-dlp/yt-dlp#update)) or later (specify commit)
- [X] I've searched [known issues](https://github.com/yt-dlp/yt-dlp/issues/3766) and the [bugtracker](https://github.com/yt-dlp/yt-dlp/issues?q=) for similar issues **including closed ones**. DO NOT post duplicates
- [X] I've read the [guidelines for opening an issue](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#opening-an-issue)

### Provide a description that is worded well enough to be understood

yt-dlp has a lot of options which help "automatic downloads". I mean that you can download multiple videos at once, can define patterns, templates for formats, output filenames, etc. But one important feature is missing: the ability to use options per-URL. At least I did not not find any possibility to accomplish this (using only yt-dlp without additional scripting, creating additional text files) after reading the documentation.

Per-URL options explained: Currently options are global, they apply for all URLs provided for yt-dlp. The additionally (and optionally) added per-URL options would apply only for specific URLs from the list. For these specific URLs would apply the global (default) options, too. Like this:

`yt-dlp [default options] URL1 [options for URL1] URL2 [options for URL2] ...`

This is the MPlayer style [solution](http://www.mplayerhq.hu/DOCS/HTML/en/MPlayer.html#commandline): the position of options matters. This the best from the user perspective. mpv uses a more complicated [syntax](https://mpv.io/manual/stable/#per-file-options).

Why is this important? I think it is obvious. It is common we want to download multiple files which have differences (like formats). To define a specific option for a specific URL from the list would be much simpler than defining various rules, combinining different options... In many cases the latest is very hard (not for every people) or even impossible to accomplish.

For example now I cannot download 2 YouTube videos with 2 custom predefined filenames (ERROR: Fixed output name but more than one file to download). But with per-URL options support this would be simple:

`yt-dlp -f 315+251 URL1 -o mycustomname1 URL2 -o mycustomname2`

### Provide verbose output that clearly demonstrates the problem

- [X] Run **your** yt-dlp command with **-vU** flag added (`yt-dlp -vU <your command line>`)
- [X] If using API, add `'verbose': True` to `YoutubeDL` params instead
- [X] Copy the WHOLE output (starting with `[debug] Command-line config`) and insert it below

### Complete Verbose Output

```shell
[debug] Command-line config: ['-vU']
[debug] Encodings: locale UTF-8, fs utf-8, pref UTF-8, out utf-8, error utf-8, screen utf-8
[debug] yt-dlp version stable@2023.10.13 [b634ba742] (zip)
[debug] Python 3.9.1+ (CPython x86_64 32bit) - Linux-5.10.10-64-x86_64-with-glibc2.31 (OpenSSL 1.1.1i  8 Dec 2020, glibc 2.31)
[debug] exe versions: ffmpeg 4.3.1-8, ffprobe 4.3.1-8, rtmpdump 2.4
[debug] Optional libraries: Cryptodome-3.9.7, certifi-2020.06.20, sqlite3-3.34.1
[debug] Proxy map: {}
[debug] Loaded 1890 extractors
[debug] Fetching release info: https://api.github.com/repos/yt-dlp/yt-dlp/releases/latest
Available version: stable@2023.10.13, Current version: stable@2023.10.13
Current Build Hash: be5cfb6be8930e1a5f427533ec32f2a481276b3da7b249d0150ce2b740ccf1ce
yt-dlp is up to date (stable@2023.10.13)
```