277 lines
8.7 KiB
Plaintext
277 lines
8.7 KiB
Plaintext
---
|
||
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)
|
||
|
||
```
|
||
|
||
|