parser<T, R>(f: (...input: T) => R): (...input: T) => R
Wraps a function that accepts input T and parses it into output R.
In the normal case, this is a no-op; if the function throws, however,
we will augment the thrown Error with context bout what was being parsed.
Get video ID.
There are a few type of video URL formats.
Credit: https://github.com/fent/node-ytdl-core/blob/master/lib/url-utils.js
{Error} If unable to find a id
{TypeError} If videoid doesn't match specs