ITADN

Midnight Grocery un

#4606Closeddebuddiez-debug 创建于 2025-09-22
D
debuddiez-debugcommented
import moviepy.editor as mp import numpy as np from moviepy.video.fx.all import fadein, fadeout # === Konfigurasi === audio_path = "Midnight Grocery Run.mp3" img1_path = "apple_1.jpg" img2_path = "apple_2.jpg" logo_path = "logo.png" # opsional output_path = "output_brontowali.mp4" fps_value = 24 use_logo = False # True = logo, False = teks watermark resolution = "1080p" # pilih: "720p", "1080p", "4k", "720p_vertical", "1080p_vertical" # === Resolusi map === res_map = { "720p": (1280, 720), "1080p": (1920, 1080), "4k": (3840, 2160), "720p_vertical": (720, 1280), "1080p_vertical": (1080, 1920) } W, H = res_map.get(resolution, (1920,1080)) # === Audio === audio = mp.AudioFileClip(audio_path).audio_fadein(2).audio_fadeout(2) duration = audio.duration # === Gambar utama (berganti) === img1 = mp.ImageClip(img1_path).set_duration(duration/2).resize(height=H-200).set_position("center") img2 = mp.ImageClip(img2_path).set_duration(duration/2).resize(height=H-200).set_position("center") visual = mp.concatenate_videoclips([fadeout(img1, 2), fadein(img2, 2)], method="compose") # === Spectrum sederhana === def spectrum_frame(t): n_bars, h = 60, 200 frame = np.zeros((h, W, 3), dtype=np.uint8) try: samples = audio.to_soundarray(fps=audio.fps)[int(t*audio.fps):int(t*audio.fps)+1024, 0] vol = np.abs(samples).mean() except: vol = 0.1 for i in range(n_bars): bh = min(int(vol*1000*np.random.uniform(0.5,1.5)), h) frame[h-bh:h, i*(W//n_bars):(i+1)*(W//n_bars)] = (0,255,200) return frame spectrum = mp.VideoClip(spectrum_frame, duration=duration).set_position(("center","bottom")) # === Judul & Credit === title = fadein(mp.TextClip("Midnight Grocery Run", fontsize=int(W/18), color="white").set_duration(duration).set_position(("center", 40)),2).fx(fadeout,2) credit = fadein(mp.TextClip("Made with MoviePy • Brontowali Channel", fontsize=int(W/28), color="white").set_duration(5).set_start(duration-5).set_position(("center","bottom")),1).fx(fadeout,1) # === Watermark (logo/teks) === if use_logo: watermark = mp.ImageClip(logo_path).set_duration(duration).resize(width=int(W/8)).set_position(("right","bottom")) else: shadow = mp.TextClip("Brontowali Channel", fontsize=int(W/28), color="black").set_duration(duration).set_opacity(0.7).set_position((W-250, H-45)) main = mp.TextClip("Brontowali Channel", fontsize=int(W/28), color="white").set_duration(duration).set_opacity(0.7).set_position(("right","bottom")) watermark = mp.CompositeVideoClip([shadow, main], size=(W,H)) # === Gabung semua === final = mp.CompositeVideoClip([visual, spectrum, title, credit, watermark], size=(W,H)).set_audio(audio) final.write_videofile(output_path, codec="libx264", audio_codec="aac", fps=fps_value)
关闭于 2025-09-22 0 条评论