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.")