Python & Cloud Automation

Automated Cloud Video Rendering Pipeline with Python and MoviePy

মোবাইল ডিভাইস বা টারমাক্স টার্মিনালকে ডেভলপমেন্ট ওয়ার্কস্পেস হিসেবে ব্যবহার করার ক্ষেত্রে অন্যতম বড় চ্যালেঞ্জ হলো মিডিয়া বা ভিডিও প্রসেসিং। ১০৮০পি বা ৪কে মানের একটি ভারী ভিডিও ফাইল লোকাল স্মার্টফোনে রেন্ডার (Render) করতে গেলে প্রসেসর ওভারহিট হয়ে অ্যাপ ক্র্যাশ করতে পারে।

এই সীমাবদ্ধতা এড়ানোর জন্য আধুনিক অটোমেশন ইঞ্জিনিয়াররা **Cloud-Offloading Pipeline** ব্যবহার করেন। এর মেকানিজম হলো, ভিডিও জেনারেশনের পুরো কোড লজিকটি আমরা পাইথনে লিখবো এবং সেটিকে ফ্রিতে হাই-পারফরম্যান্স ক্লাউড ইনফ্রাস্ট্রাকচারে (যেমন: Kaggle Notebooks বা Hugging Face Spaces) রান করাবো। ক্লাউডের শক্তিশালী মাল্টি-কোর ভার্চুয়াল সিপিইউ মিলি-সেকেন্ডে হেভি রেন্ডারিং প্রসেস শেষ করে আউটপুট ফাইলটি সরাসরি গিট বা সিডিএন স্টোরেজে পাঠিয়ে দেবে।

ধাপ ১: কোর ডিপেন্ডেন্সি ইনস্টলেশন

আপনার ক্লাউড এনভায়রনমেন্ট বা Hugging Face Docker-এর ডিপেন্ডেন্সি ফাইলে পাইথনের অন্যতম শক্তিশালী প্রোগ্রাম্যাটিক মিডিয়া লাইব্রেরি **MoviePy** এবং ইমেজ প্রসেসিং মডিউল সেটআপ করে নিন:

pip install moviepy pillow numpy

ধাপ ২: ডাইনামিক ভিডিও জেনারেশন স্ক্রিপ্ট তৈরি

আপনার প্রজেক্টের **`render_engine.py`** ফাইলে নিচের প্রো-লেভেল পাইথন স্ক্রিপ্টটি কনফিগার করুন। এটি একটি ব্যাকগ্রাউন্ড ইমেজ, কাস্টম অডিও ফাইল এবং ওভারলে ডাইনামিক সাবটাইটেল টেক্সট কম্বাইন করে প্রফেশনাল আউটপুট রেন্ডার করতে সক্ষম:

from moviepy.editor import ImageClip, AudioFileClip, TextClip, CompositeVideoClip
import os

def generate_automated_video(image_path, audio_path, output_name, text_content):
    print("🎬 Initializing Cloud Video Render Engine...")
    
    if not os.path.exists(image_path) or not os.path.exists(audio_path):
        raise FileNotFoundError("Missing target asset files inside the workspace.")

    # ১. অডিও ট্র্যাক লোড করা এবং তার দৈর্ঘ্য নির্ধারণ করা
    audio_clip = AudioFileClip(audio_path)
    video_duration = audio_clip.duration

    # ২. ব্যাকগ্রাউন্ড ইমেজ ক্লিপ তৈরি এবং অডিওর সমান দৈর্ঘ্য দেওয়া
    bg_clip = ImageClip(image_path).set_duration(video_duration)

    # ৩. অ্যাডভান্সড ডাইনামিক টেক্সট ওভারলে সেটআপ
    # বিশেষ দ্রষ্টব্য: ক্লাউড লিনাক্সে ImageMagick অবশই ইনস্টলড থাকতে হবে
    txt_clip = TextClip(
        text_content, 
        fontsize=45, 
        color='white', 
        font='Arial-Bold',
        method='caption',
        size=(1080, 200)
    ).set_position(('center', 'center')).set_duration(video_duration)

    # ৪. সমস্ত ক্লিপ একসাথে লেয়ারিং করা (Compositing)
    final_video = CompositeVideoClip([bg_clip, txt_clip])
    final_video = final_video.set_audio(audio_clip)

    # ৫. হাই-স্পিড মাল্টি-থ্রেডেড রেন্ডারিং এক্সিকিউশন
    print(f"🚀 Processing Render Pipeline for: {output_name}")
    final_video.write_videofile(
        output_name,
        fps=24,
        codec='libx264',
        audio_codec='aac',
        threads=8, # ক্লাউড সিপিইউর ৮টি থ্রেড একসাথে ব্যবহার করা
        preset='ultrafast' # ট্রাফিক স্পিড বাড়ানোর ট্রিক
    )
    
    print("🎉 Rendering Completed Successfully!")

# ডেমো এক্সিকিউশন কলিং ট্রিক
if __name__ == "__main__":
    generate_automated_video(
        image_path="background.jpg",
        audio_path="voiceover.mp3",
        output_name="coldcase_zone_final.mp4",
        text_content="Cold Case Zone: Unraveling the mysterious architectural footprints of open-source networks."
    )

ধাপ ৩: হেডলেস রানটাইমে ভিডিও পুশ প্রসেস

হাগিং ফেস বা ক্যাগলে স্ক্রিপ্টটি রান করার পর (python render_engine.py) তৈরি হওয়া .mp4 ফাইলটি সরাসরি আপনার টেলিগ্রাম বট বা কোনো ফ্রি ক্লাউড ড্রাইভ স্টোরেজে পুশ করতে স্ক্রিপ্টের একদম নিচে নিচের শেল কমান্ড বাইন্ডিং ট্রিকটি যোগ করে দিতে পারেন:

# রেন্ডার করা ভিডিওটি টেলিগ্রাম চ্যানেলে পুশ করার কমান্ড
os.system("curl -X POST https://api.telegram.org/bot<TOKEN>/sendVideo -F chat_id=<ID> -F video=@coldcase_zone_final.mp4")

প্রো-লেভেল ট্রিক (ColdCaseZone Optimization): আপনি যদি কোনো জটিল ভিডিও ডেভলপমেন্ট অটোমেশন প্রজেক্ট (যেমন স্বয়ংক্রিয় স্টোরিলাইন জেনারেটর) হ্যান্ডেল করতে চান, তবে মোবাইলের লোকাল স্টোরেজে এক ফোঁটা চাপ না দিয়ে পুরো প্রজেক্টের অ্যাসেটস ডাটা একটি রিমোট গিটহাবে পুশ করে রাখবেন। ক্লাউডের রেন্ডার হাবে অটো-ফেচ কমান্ড দিয়ে রেন্ডার শেষ করে আউটপুট এপিআই-এর মাধ্যমে ট্রান্সফার করে নিলে প্রজেক্ট ম্যানেজমেন্ট কস্ট একদম শুন্যের কোঠায় নেমে আসে।