-
Notifications
You must be signed in to change notification settings - Fork 1
/
videomaker.py
118 lines (98 loc) · 3.84 KB
/
videomaker.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import praw
import os
from videomaker.utils.sanitize import sanitize_text
from praw.models import MoreComments
from videomaker.utils.tts import text_to_speach
from videomaker.utils.screenshot import screenshot
from videomaker.types.audio import Audio
from videomaker.types.comment import Comment
from videomaker.types.video import Video
from moviepy.editor import *
from videomaker.config import config, creds
from videomaker.utils.console import *
import json
credentials = "client_secrets.json"
SAMPLE = 1
def main():
"""Automatically generate videos from Reddit posts."""
reddit = praw.Reddit(
client_id=creds["client_id"],
client_secret=creds["client_secret"],
user_agent=creds["user_agent"],
redirect_uri=creds["redirect_uri"],
refresh_token=creds["refresh_token"],
)
submissions = reddit.subreddit(config["reddit"]["subreddit"]).top(
limit=SAMPLE, time_filter=config["reddit"]["time_filter"]
)
while True:
for index, submission in enumerate(submissions):
print_markdown(submission.title)
video = Video(
submission.title,
submission.url,
submission.author.name,
submission.fullname,
)
if not yes_no_prompt("Use post in video?"):
break
screenshot(video.url, False, video.fullname + ".png")
video.screen_shot = "screenshot/" + video.fullname + ".png"
video.intro_audio = text_to_speach(
"<speak>" + video.title + "</speak>",
"audio/" + video.author + ".wav",
)
for comment in submission.comments:
if isinstance(comment, MoreComments):
continue
cleaned = sanitize_text(comment.body)
print_markdown(f"### Comment\n {cleaned}")
if yes_no_prompt("Include in video?"):
comment = Comment(
cleaned,
comment.author,
)
comment.audio = text_to_speach(
comment.ssml(),
"audio/" + video.fullname + comment.author.name + ".wav",
)
video.comments.append(comment)
print_step(f"Video length: {video.video_length()}s")
if video.video_length() > config["video"]["target_length"]:
print_step("Target length reached.")
break
if yes_no_prompt("Done with video?"):
break
video.edit_video()
submissions = reddit.subreddit(config["reddit"]["subreddit"]).top(
limit=SAMPLE,
time_filter=config["reddit"]["time_filter"],
params={"after": video.fullname},
)
if __name__ == "__main__":
# main()
video = Video(
"What crazy stuff happened in the year 2001 that got overshadowed by 9/11?",
"url",
"author",
"bet",
)
with open("audio/NightNo423.wav.json") as file:
timestamps = json.load(file)
video.intro_audio = Audio(
"audio/NightNo423.wav", timestamps, AudioFileClip("audio/NightNo423.wav")
)
video.screen_shot = "screenshot/t3_1dcy3pi.png"
video.comments.append(
Comment(
"American Airlines Flight 587 An Airbus A-300 crashed in Queens, NY two months after 9/11. It was the second-deadliest aviation accident in US history, and not well remembered.",
"IsNoHeroes94",
)
)
video.comments[0].audio = Audio(
"audio/t3_1dcy3piCheesy_Discharge.wav",
json.load(open("audio/t3_1dcy3piCheesy_Discharge.wav.json")),
AudioFileClip("audio/t3_1dcy3piCheesy_Discharge.wav"),
)
# video.comments.append(video.comments[0])
video.edit_video()