misc python code
This commit is contained in:
276
code/misc/python/scripts/ComputableDocs/musicdownload.qmd
Normal file
276
code/misc/python/scripts/ComputableDocs/musicdownload.qmd
Normal file
@@ -0,0 +1,276 @@
|
||||
---
|
||||
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)
|
||||
- [L’AMOUR 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)
|
||||
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user