I needed to get the mic name to avoid changing a script that used it, every time I changed the mic or just the usb port for the mic. So I found that the sounddevice module was the best for my purpose and that’s how easy is to get it and use it in a program that needs it. You can check the specs too of the devices.
So, if you need to know the name that windows uses for its devices, like a microphone for example, in your programs you can do this:
import sounddevice as sd def get_mic_name(): "Uses sounddevice to get the name of the mic in case it changed" s = sd.query_devices() audio = f"""{s[1]["name"]})""" return audio name = get_mic_name()
So, here I am getting the name of the mic, that (in my case) is the “name” key of the second dictionary in the list of dictionaries that are made by the query_devices function class of sounddevice.
Watch the video to get an example of use of it.
The program I use to record the screen
This needs to be adapted to your needs, but I post it here in case you could take some tips out of it for your needs.
import os import glob import sounddevice as sd x = 0 def ask(): root = "G:\\video\\" filename = input("Nome del file: ") filepath = root + filename + ".mp4" return filepath, root def automatic_name(): "Crea il nome da solo / ora chiedo il nome del file prima" global x fld = "G:\\video" if not fld + str(x) + ".mp4" in glob.glob(fld + "*.mp4"): filename = fld + str(x) + ".mp4" else: x += 1 record() filename = fld + filename + ".mp4" return filename def get_mic_name(): "Uses sounddevice to get the name of the mic in case it changed" s = sd.query_devices() audio = f"""{s[1]["name"]})""" return audio def record(filename): # audio = "Microfono (Logitech USB Headset)" # audio = "Stereo Mix (Realtek High Definition Audio(SST))" audio = get_mic_name() print(f"Using {audio}") i = f"-i audio=\"{audio}\"" # video_size = "1366x768" video_size = "1680x1050" # added a compressor 15/03/2020 # Capture both screens # i = f"-i video=\"UScreenCapture\":audio=\"{audio}\"" #Capture one screen #screen = "UScreenCapture" #screen = "gdigrab" screen = "UScreenCapture" compressor = "-af acompressor=threshold=0.089:ratio=9:attack=200:release=1000" # attenuate 10db at 1000 Hz # equalizer = "-af \"equalizer=f=1000:width_type=h:width=200:g=-10\"" # Apply 2 dB gain at 1000 Hz with Q 1 and attenuate 5 dB at 100 Hz with Q 2: # equalizer = "-af \"equalizer=f=1000:t=q:w=1:g=2,equalizer=f=100:t=q:w=2:g=-5\"" #lowpass at 1000 b0 = -8 b250 = 4 e1000 = -8 e4000 = 0 e16000 = -8 equalizer = f"-af \"firequalizer=gain_entry='entry(0,{b0});entry(250,{b250});entry(1000,{e1000});entry(4000,{e4000});entry(16000,{e16000})'\"" # echo = "-af aecho=1:0.3:10:1" # echo = "-af aecho=1.0:0.7:10:0.5" echo = "" # fr = input("Frame rate (10):") fr = 10 os.system(f"""ffmpeg -y -rtbufsize 200M -f gdigrab -thread_queue_size 1024 -probesize 10M -r {fr} -draw_mouse 1 -video_size {video_size} -i desktop -f dshow -channel_layout stereo -thread_queue_size 1024 {i} {compressor} {equalizer} -c:v libx264 -r 10 -preset ultrafast -tune zerolatency -crf 25 -pix_fmt yuv420p -c:a aac -strict -2 -ac 2 -b:a 128k -vf "pad=ceil(iw/2)*2:ceil(ih/2)*2" {echo} "{filename}" """) # filename = "rtmp://youtube_stream_url/03r8-71q2-yrvm-bbe7" filepath, root = ask() print(root) def mk_bat(cmd): command = "py -m " + cmd with open(root + cmd + ".bat", "w") as file: file.write(command) # # Create the join.bat program # command = "py -m joinmp4" # with open(root + "join.bat", "w") as file: # file.write(command) # create the frame rate program mk_bat("joinmp4") mk_bat("framerate") with open("c:\\users\\giova\\desktop\\ffmpeg_open.bat", "w") as file: file.write("start " + root) record(filepath) # os.startfile("timer.py") # TO OPEN THE FOLDER os.system("start " + root)
Subscribe to the newsletter for updates
Tkinter templates
My youtube channel
Twitter: @pythonprogrammi - python_pygame