Python YouTube Video Downloader
Global variables

one major suggestion - don't (over)use global variables, it's generally not a good practice and it will make more difficult to test the code. For example if you'd like to add a functionality for downloading multiple items at the same time you'll have a hard time with it.

So instead of this:
def av_select():
    global av_switch # this function is setting value for this variable


def Main():
    global av_switch # this function is reading this variable
    av_select()

do this:
def av_select():
    while True:
        av_switch = input('Please enter \'1\' for Video and \'2\' for Audio\n')
        if av_switch not in ('1', '2'):
            print('Please make a valid selection')
            continue
        return av_switch # add return statement with the value


def Main():
    av_switch = av_select() # use the value returned from function
    if av_switch == '1':

same applies to other global variables.
Python coding guidelines

follow PEP 8 guidelines, in this case the name of the function Main is violating it - function names should be lowercase.

recommended way how to do code comments is to use docstrings. Instead of this:


#Define Download location 
def download_location():

do this:
def download_location():
   &quot;&quot;&quot;define download location&quot;&quot;&quot;

this way the comment can be accessed as download_location.__doc__ and a lot of tools (eg. for generating documentation) can work with it.
Code flow

the following one is probably a matter of taste, but it feels like you're overusing while True: loops in places where you can rely on other variables you are &quot;waiting&quot; for. For example av_select() - I'd use the aw_switch variable as a condition of the loop this way:

def av_select():
    av_switch = None
    while av_switch not in ('1', '2'):
        av_switch = input('Please enter \'1\' for Video and \'2\' for Audio\n')

    # outside the while loop, av_switch finally matches '1' or '2'
    return av_switch