Files
notes/code/misc/python/scripts/ComputableDocs/musicdownload.qmd
2024-12-20 21:50:09 +00:00

277 lines
8.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "DownloadPage"
code-fold: true
execute:
enabled: true
cache: false
jupyter: python3
format:
html:
toc: true
code-fold: true
html-math-method: katex
css: styles.css
---
# Miri's requests!
```{python}
#| echo: true
from pathlib import Path
from pytube import YouTube
from pytube import Playlist
import moviepy.editor as mp
from youtube_transcript_api import YouTubeTranscriptApi
from pathvalidate import sanitize_filepath
def convert_mp4_to_mp3(file,oppath):
try:
# Load the video file
#video = mp.VideoFileClip(file)
audio=mp.AudioFileClip(str(file))
stem=str(file.stem)#.replace.rstrip().lstrip()
oppath=oppath/'mp3'
oppath.mkdir(parents=True,exist_ok=True)
audio_path=sanitize_filepath(oppath/f'{stem}.mp3')
print('audio_path', stem, audio_path)
# Extract the audio from the video and save it as an MP3 file
#video.audio.write_audiofile(audio_path, codec='pcm_s16le')
audio.write_audiofile(str(audio_path),write_logfile=True,verbose=True)#, codec='pcm_s16le')
# Print a success message
print(f"Audio extracted and saved as: {audio_path}")
except Exception as e:
print(f"Error converting MP4 to MP3: {e}")
def convert_mp4_to_wav(file,oppath):
try:
# Load the video file
#video = mp.VideoFileClip(file)
audio=mp.AudioFileClip(str(file))
stem=str(file.stem)#.replace.rstrip().lstrip()
oppath=oppath/'wav'
oppath.mkdir(parents=True,exist_ok=True)
audio_path=sanitize_filepath(oppath/f'{stem}.wav')
print('audio_path', stem, audio_path)
# Extract the audio from the video and save it as an MP3 file
#video.audio.write_audiofile(audio_path, codec='pcm_s16le')
audio.write_audiofile(str(audio_path),codec='pcm_s16le',write_logfile=False,verbose=True)#, codec='pcm_s16le')
# Print a success message
print(f"Audio extracted and saved as: {audio_path}")
except Exception as e:
print(f"Error converting MP4 to MP3: {e}")
def download_mp4(video_url,oppath):
# Get the YouTube object
yt = YouTube(video_url)
# Get video title and language
title = yt.title
# print (title)
video_stream = yt.streams.filter(adaptive=True).order_by('abr')
# print(video_stream)
fname=sanitize_filepath(oppath/ f'{title}.mp4')
video_stream.last().download(filename=oppath/ f'{title}.mp4')
return fname
def download_songlist(songs,oppath):
for song in songs:
try:
file=download_mp4(song,oppath)
convert_mp4_to_mp3(file,oppath)
except Exception as e:
print(f"Error downloading file: {e}")
continue
def download_playlist(url_playlist,oppath):
playlist = Playlist(url_playlist)
ls=[]
for urls in playlist.video_urls:
ls.append(urls)
download_songlist(ls,oppath)
return
```
fix pytube issue
```{python}
from pytube import cipher
import logging
import re
logger = logging.getLogger(__name__)
def get_throttling_function_name(js: str) -> str:
"""Extract the name of the function that computes the throttling parameter.
:param str js:
The contents of the base.js asset file.
:rtype: str
:returns:
The name of the function used to compute the throttling parameter.
"""
function_patterns = [
# https://github.com/ytdl-org/youtube-dl/issues/29326#issuecomment-865985377
# https://github.com/yt-dlp/yt-dlp/commit/48416bc4a8f1d5ff07d5977659cb8ece7640dcd8
# var Bpa = [iha];
# ...
# a.C && (b = a.get("n")) && (b = Bpa[0](b), a.set("n", b),
# Bpa.length || iha("")) }};
# In the above case, `iha` is the relevant function name
r'a\.[a-zA-Z]\s*&&\s*\([a-z]\s*=\s*a\.get\("n"\)\)\s*&&\s*'
r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])?\([a-z]\)',
r'\([a-z]\s*=\s*([a-zA-Z0-9$]+)(\[\d+\])\([a-z]\)',
]
logger.debug('Finding throttling function name')
for pattern in function_patterns:
regex = re.compile(pattern)
function_match = regex.search(js)
if function_match:
logger.debug("finished regex search, matched: %s", pattern)
if len(function_match.groups()) == 1:
return function_match.group(1)
idx = function_match.group(2)
if idx:
idx = idx.strip("[]")
array = re.search(
r'var {nfunc}\s*=\s*(\[.+?\]);'.format(
nfunc=re.escape(function_match.group(1))),
js
)
if array:
array = array.group(1).strip("[]").split(",")
array = [x.strip() for x in array]
return array[int(idx)]
raise RegexMatchError(
caller="get_throttling_function_name", pattern="multiple"
)
cipher.get_throttling_function_name = get_throttling_function_name
```
## song list 2024-06-24
- [Sabrina Carpenter - Please Please Please (Lyric Video)](https://www.youtube.com/watch?v=Yl_thbk40A0)
- [Sabrina Carpenter - Espresso (Lyrics)](https://www.youtube.com/watch?v=kVC3BSBm2Dc)
- [Kaash Paige - Love Songs (Lyrics)](https://www.youtube.com/watch?v=7P4q7Oo67-U)
- [LAMOUR DE MA VIE (Lyrics)](https://www.youtube.com/watch?v=RhGaivzNHps)
- [SZA Greatest Hits Full Album 2024](https://www.youtube.com/watch?v=W6kc4k4NmWQ)
- [Eminem - Just Lose It (Official Music Video)](https://www.youtube.com/watch?v=9dcVOmEQzKA)
- [Rihanna New Playlist 2023](https://www.youtube.com/watch?v=5o9AQs4GOeA)
- [Eminem - Houdini (Perfectly Clean)](https://www.youtube.com/watch?v=YMwWZXQ9xQU)
- [Tyla - Water (Lyrics)](https://www.youtube.com/watch?v=A81ZfezsLcM)
```{python}
p=!pwd
#p[0]
#!tree {p[0]}
musicpath='~/Music/Miri'
!tree -d {musicpath}
```
```{python}
#| echo: false
#| output: false
#| eval: false
oppath=Path('/home/ys/Music/Miri/7_playlist')
list_20240624=['https://www.youtube.com/watch?v=Yl_thbk40A0',
'https://www.youtube.com/watch?v=kVC3BSBm2Dc',
'https://www.youtube.com/watch?v=7P4q7Oo67-U',
'https://www.youtube.com/watch?v=RhGaivzNHps',
'https://www.youtube.com/watch?v=W6kc4k4NmWQ',
'https://www.youtube.com/watch?v=9dcVOmEQzKA',
'https://www.youtube.com/watch?v=5o9AQs4GOeA',
'https://www.youtube.com/watch?v=YMwWZXQ9xQU',
'https://www.youtube.com/watch?v=A81ZfezsLcM']
list_20240624
download_songlist(list_20240624,oppath)
```
## song list 2024-10-05
- [sza playlist 1](https://youtu.be/455TWGwAObA?si=GZVF3c86L57d8MsF)
- [sza playlist 2](https://youtu.be/IlnxfwtCqLU?si=TjdWp9QbSG2LM2E9) #did not download
- [travis scott clean](https://youtu.be/7tcYOY50yXg?si=2zYcfSbta9WhTzGd)
- [rihanna playlist](https://youtu.be/5o9AQs4GOeA?si=I0YLFJQl0YwEx9AG) #did not download
- [weekend playlist](https://youtu.be/mPXBHFFUgzw?si=g4fhhhza2COvSnLZ) #did not download
- [travis scott clean 2](https://youtu.be/JPo3xwzupbE?si=B32de3hrHuaG283K)
- [power is power clean](https://youtu.be/iFwQcBoljoo?si=cXrK5-RDq77rvWmh)
```{python}
#| echo: false
#| output: false
#| eval: true
oppath=Path('/home/ys/Music/Miri/8_playlist')
oppath.mkdir(parents=True,exist_ok=True)
list_20241005=['https://youtu.be/455TWGwAObA?si=GZVF3c86L57d8MsF',
'https://youtu.be/IlnxfwtCqLU?si=TjdWp9QbSG2LM2E9',
'https://youtu.be/7tcYOY50yXg?si=2zYcfSbta9WhTzGd',
'https://youtu.be/5o9AQs4GOeA?si=I0YLFJQl0YwEx9AG)',
'https://youtu.be/mPXBHFFUgzw?si=g4fhhhza2COvSnLZ',
'https://youtu.be/JPo3xwzupbE?si=B32de3hrHuaG283K',
'https://youtu.be/iFwQcBoljoo?si=cXrK5-RDq77rvWmh'
]
download_songlist(list_20241005,oppath)
```
# My downloads
## song list 2024-07-13
- [Vicente Amigo - De Mi Corazón Al Aire](https://www.youtube.com/watch?v=6RZwLta9MHg&list=OLAK5uy_lHANtM_kWgkJVkbl8w83LuIyL8QIIBMWE&index=1)
- [Vicente Amigo - Vivencias Imaginadas](https://www.youtube.com/watch?v=cvrg4wn7vlQ&list=OLAK5uy_nl4MMy9w40xh1g4KPGbZfB7bs9_ga6Mho&index=2)
- [Vicente Amigo - Ciudad De Las Ideas](https://www.youtube.com/watch?v=QyBNAtr44X8&list=PLlf0nWXS9c9CRKpqe08BVKtzO7FHXW6sF)
```{python}
#| echo: false
#| output: false
#| eval: false
oppath=Path('/home/ys/Music/youtube')/'Vicente Amigo'/'De Mi Corazon Al Aire'
oppath.mkdir(parents=True,exist_ok=True)
#download_playlist('https://www.youtube.com/watch?v=6RZwLta9MHg&list=OLAK5uy_lHANtM_kWgkJVkbl8w83LuIyL8QIIBMWE&index=1',oppath)
oppath=Path('/home/ys/Music/youtube')/'Vicente Amigo'/'Vivencias Imaginadas'
oppath.mkdir(parents=True,exist_ok=True)
#download_playlist('https://www.youtube.com/watch?v=cvrg4wn7vlQ&list=OLAK5uy_nl4MMy9w40xh1g4KPGbZfB7bs9_ga6Mho&index=1',oppath)
oppath=Path('/home/ys/Music/youtube')/'Vicente Amigo'/'Ciudad De Las Ideas'
oppath.mkdir(parents=True,exist_ok=True)
#download_playlist('https://www.youtube.com/watch?v=QyBNAtr44X8&list=PLlf0nWXS9c9CRKpqe08BVKtzO7FHXW6sF',oppath)
```