Spaces:
Sleeping
Sleeping
from moviepy.editor import VideoFileClip, concatenate_videoclips | |
files = { | |
1: "1.mp4", 2: "2.mp4", 3: "3.mp4", 4: "4.mp4", 5: "5.mp4", | |
6: "6.mp4", 7: "7.mp4", 8: "8.mp4", 9: "9.mp4", | |
10: "10.mp4", 11: "11.mp4", 12: "12.mp4", 13: "13.mp4", 14: "14.mp4", | |
15: "15.mp4", 16: "16.mp4", 17: "17.mp4", 18: "18.mp4", 19: "19.mp4", | |
20: "20.mp4", 30: "30.mp4", 40: "40.mp4", 50: "50.mp4", | |
60: "60.mp4", 70: "70.mp4", 80: "80.mp4", 90: "90.mp4", | |
100: "100.mp4", 1000: "1000.mp4", | |
100000: "100000.mp4" | |
} | |
def number_to_clips(n): | |
components = [] | |
if n >= 100000: | |
lakh = n // 100000 | |
if lakh > 0: | |
components.append(lakh) | |
components.append(100000) | |
n %= 100000 | |
if n >= 1000: | |
thousand = n // 1000 | |
if thousand > 0: | |
components.append(thousand) | |
components.append(1000) | |
n %= 1000 | |
if n >= 100: | |
hundred = n // 100 | |
if hundred > 0: | |
components.append(hundred) | |
components.append(100) | |
n %= 100 | |
if n > 20: | |
tens = (n // 10) * 10 | |
if tens > 0: | |
components.append(tens) | |
n %= 10 | |
if n > 0: | |
components.append(n) | |
return components | |
def generate_clip_sequence(n): | |
components = number_to_clips(n) | |
clip_sequence = [] | |
for component in components: | |
if component in files: | |
clip_sequence.append(files[component]) | |
else: | |
# Break down further if component is not in files | |
sub_components = number_to_clips(component) | |
clip_sequence.extend([files[sub] for sub in sub_components]) | |
return clip_sequence | |
def trimmed_clip_path(clip, avatar_path="custom_clips"): | |
print(f"{avatar_path}/{clip.split('.mp4')[0]}_cut.mp4") | |
return f"{avatar_path}/{clip.split('.mp4')[0]}_cut.mp4" | |
def get_clip_duration(clip, avatar_path="custom_clips"): | |
if avatar_path == "custom_clips": | |
avatar_path = "custom_clips" | |
else: | |
avatar_path = "template_clips" | |
try: | |
clip = VideoFileClip(trimmed_clip_path(clip, avatar_path=avatar_path)) | |
return clip.duration | |
except Exception as e: | |
print(f"Error loading clip {trimmed_clip_path(clip)}: {e}") | |
return 0 | |
def cut_clip(clip, st, en): | |
""" | |
Cuts the given clip from start time `st` to end time `en`. | |
""" | |
return clip.subclip(st, en) | |
def create_video_old(number,st, en, output_file="output.mp4"): | |
""" | |
Creates a video for the given number using pre-defined video clips. | |
""" | |
# Special files | |
intro_file = "trimmed_clips/Intro_cut.mp4" | |
conclusion_file = "trimmed_clips/Conclusion_cut.mp4" | |
clips_to_combine = [intro_file] | |
clips = generate_clip_sequence(number) | |
for clip in clips: | |
clips_to_combine.append(trimmed_clip_path(clip)) | |
clips_to_combine.append(conclusion_file) | |
# Load and combine video clips | |
video_clips = [] | |
for clip_path in clips_to_combine: | |
try: | |
clip = VideoFileClip(clip_path) | |
clip = cut_clip(clip, st, clip.duration - en) | |
video_clips.append(clip) | |
except Exception as e: | |
print(f"Error loading clip {clip_path}: {e}") | |
# Concatenate the video clips | |
if video_clips: | |
final_video = concatenate_videoclips(video_clips) | |
final_video.write_videofile(output_file, codec="libx264", audio_codec="aac") | |
else: | |
print("No clips to combine. Video creation failed.") | |
def create_advanced_video(number, trim_settings, avatar, output_file="output.mp4"): | |
if avatar == "custom": | |
path = "custom_clips" | |
intro_file = f"{path}/Intro_cut.mp4" | |
conclusion_file = f"{path}/Conclusion_cut.mp4" | |
else: | |
path = "template_clips" | |
intro_file = f"{path}/Intro_cut.mp4" | |
conclusion_file = f"{path}/Conclusion_cut.mp4" | |
print(f"Using avatar: {avatar}") | |
clips_to_combine = [VideoFileClip(intro_file)] | |
clips = generate_clip_sequence(number) | |
video_clips = [] | |
for i, clip_path in enumerate(clips): | |
try: | |
clip = VideoFileClip(trimmed_clip_path(clip_path, avatar_path=path)) | |
trim_start, trim_end = trim_settings[i] | |
trimmed_clip = cut_clip(clip, trim_start, clip.duration - trim_end) | |
video_clips.append(trimmed_clip) | |
except Exception as e: | |
print(f"Error loading clip {clip_path}: {e}") | |
clips_to_combine.extend(video_clips) | |
clips_to_combine.append(VideoFileClip(conclusion_file)) | |
if video_clips: | |
final_video = concatenate_videoclips(clips_to_combine) | |
final_video.write_videofile(output_file, codec="libx264", audio_codec="aac") | |
else: | |
print("No clips to combine. Video creation failed.") | |
def combine_video(number, video_id, output_file="output.mp4"): | |
path = f"{video_id}_clips" | |
intro_file = f"{path}/Intro_cut.mp4" | |
conclusion_file = f"{path}/Conclusion_cut.mp4" | |
clips_to_combine = [intro_file] | |
clips = generate_clip_sequence(number) | |
for clip in clips: | |
clips_to_combine.append(trimmed_clip_path(clip, avatar_path=path)) | |
clips_to_combine.append(conclusion_file) | |
# Load and combine video clips | |
video_clips = [] | |
for clip_path in clips_to_combine: | |
try: | |
clip = VideoFileClip(clip_path) | |
video_clips.append(clip) | |
except Exception as e: | |
print(f"Error loading clip {clip_path}: {e}") | |
# Concatenate the video clips | |
if video_clips: | |
final_video = concatenate_videoclips(video_clips) | |
final_video.write_videofile(output_file, codec="libx264", audio_codec="aac") | |
else: | |
print("No clips to combine. Video creation failed.") |