forked from zephyrus3/yt2anchorfm
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathyt_helper.py
62 lines (49 loc) · 1.8 KB
/
yt_helper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import logging
import yt_dlp
import json
import os
logger = logging.getLogger("YT_HELPER")
YT_URL = 'https://www.youtube.com/watch?v='
DEFAULT_FILENAME = "episode"
DEFAULT_AUDIO_FILENAME = DEFAULT_FILENAME + '.mp3'
def treat_episode_json(episodeInfo, episodeYtInfo):
logger.info("Treating Episode Info")
get_value = lambda key, infoLocal, infoYT: infoLocal[
key] if key in infoLocal and infoLocal[key] else infoYT[key]
id = get_value("id", episodeInfo, episodeYtInfo)
title = get_value("title", episodeInfo, episodeYtInfo)
desc = get_value("description", episodeInfo, episodeYtInfo)
return {
"id": id,
"title": title if title else "No Title",
"description": desc if desc else "No Description"
}
def getVideoInfo(video_id):
logger.info(f"Getting video ({video_id}) info")
ydl_opts = {}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
info = ydl.extract_info(YT_URL + video_id, download=False)
return info
def download_audio(video_info):
episode_name = f"{DEFAULT_FILENAME}{video_info['id']}"
ydl_opts = {
'format':
'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl':
episode_name + '.%(ext)s',
'logger':
logger,
}
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
logger.info("Downloading video and converting audio")
ret = ydl.download([YT_URL + video_info['id']])
if ret == 0:
logger.info("Renaming episode audio file")
os.rename(f"{episode_name}.mp3", DEFAULT_AUDIO_FILENAME)
return os.path.abspath(DEFAULT_AUDIO_FILENAME)
raise Exception(f"Youtube Video download failed with error: {ret}")