Baixar músicas com python + shell script

Eu queria baixar minhas músicas do osu! há um tempo, mas sempre soube que por serem muitas ia demorar para fazer manualmente. Então usei o python e um pouco de shell script para fazer isso.

Primeiro, tirei print de todas as músicas que queria baixar. Elas são assim:

[print]

Na parte superior tem o titulo da música e o artista, então usei o pytesseract para pegar essas informações de cada print tirada e gravar todas em um arquivo:

from PIL import Image
from pytesseract import pytesseract
import os

#Define path to tessaract.exe
path_to_tesseract = '/usr/bin/tesseract'
#Define path to image
path_to_image = '/mnt/Games/osu/Screenshots/screenshot031.jpg'
#Point tessaract_cmd to tessaract.exe
pytesseract.tesseract_cmd = path_to_tesseract

path_to_images = '/mnt/Games/osu/Screenshots/'


with open('osusongslist', 'w') as f:
f.write('')


for root, dirs, file_names in os.walk(path_to_images):
#Iterate over each file_name in the folder
for file_name in file_names:
#Open image with PIL
img = Image.open(path_to_images + file_name)

#crop it
width, height = img.size

left = 43
top = 0
right = 1700
bottom = 33

im1 = img.crop((left, top, right, bottom))
#im1.show()
#Extract text from image
text = pytesseract.image_to_string(im1)
sept = '['
ntext = text.split(sept, 1)[0]

with open('osusongslist', 'a') as f:
f.write(text)
#f.write('\n')

print(text)

#pegar de onde eu tirei esse script

Depois com esse arquivo formatei o que tinha de resultado com grep + sed para tirar tudo depois [ e só manter as linhas que tinham ‘artista - musica’:

sed 's|\[.*||g' osusongslist | grep -oP ".* - .*" >> osusongslist

E finalmente, usei um pouco de shell script + ytdl para baixar as músicas:

#!/bin/bash

cat osusongslist | while read line 
do

youtube-dl -i -o "%(title)s-%(id)s.%(ext)s" --embed-thumbnail --add-metadata -x -f bestaudio --audio-quality 0 --audio-format mp3 --default-search auto "$line"

done

Sei que poderia ter criado uma condição no python para colocar a linha no arquivo formatada, mas o objetivo era ser rápido, e como já estou acostumado com sed/grep, foi o que acabei usando.

Tempo para criar o script (com pesquisa, instalação do tesseract, etc) = 15 minutos

Tempo que o script demorou para baixar as músicas = 1h45m (143 músicas)