2025, Oct 20 13:31

MoviePy में वीडियो स्पीड बढ़ाते समय MultiplySpeed का सही उपयोग

MoviePy में MultiplySpeed से वीडियो स्पीड बढ़ाएं: apply() या with_effects() अपनाएं, write_videofile पर AttributeError से बचें और अपनी पाइपलाइन भरोसेमंद रखें.

MoviePy में वीडियो की गति बढ़ाना मुश्किल बन सकता है, जब आप इफेक्ट्स को क्लिप समझ बैठते हैं। अक्सर लोग MultiplySpeed को सीधे किसी वेरिएबल को सौंप देते हैं और उसी पर write_videofile चलाते हैं — नतीजा AttributeError. अगर आपको यह चेतावनी मिली है कि MultiplySpeed ऑब्जेक्ट में write_videofile नाम का एट्रिब्यूट नहीं है, तो आगे का हिस्सा आपके लिए ही है।

समस्या का उदाहरण

नीचे दिया गया स्निपेट वीडियो को तेज करने की कोशिश करता है, लेकिन असफल हो जाता है क्योंकि इफेक्ट क्लिप पर लगाया ही नहीं गया है:

from moviepy import *
import moviepy.video.fx as vfx
from moviepy.video.fx import MultiplySpeed
# क्लिप को लोड करें और फिर गलती से उसे इफेक्ट ऑब्जेक्ट से बदल दें
media_in = VideoFileClip(r"xxx.mp4")
media_in = MultiplySpeed(2)
media_in.write_videofile("fast_export.mp4", codec="libx264")

यह AttributeError फेंकता है, क्योंकि जो वेरिएबल पहले क्लिप रखता था, अब उसमें इफेक्ट का इंस्टेंस है।

वास्तव में क्या हो रहा है

MultiplySpeed एक इफेक्ट है। यह खुद वीडियो नहीं बन जाता; इसे किसी मौजूदा क्लिप पर लगाया जाना चाहिए। जब आप क्लिप वेरिएबल को MultiplySpeed(2) से ओवरराइट कर देते हैं, तो write_videofile जैसी क्लिप मेथड्स तक पहुंच खो देते हैं। सही तरीका है कि वेरिएबल में असली क्लिप रखें और इफेक्ट को या तो apply() से लगाएं, या क्लिप पर with_effects() के जरिए जोड़ें। डॉक्यूमेंटेशन apply() के साथ इफेक्ट ऑब्जेक्ट लगाने की बात करता है, और सोर्स कोड दिखाता है कि क्लिप पर with_effects() भी उपलब्ध है।

कारगर समाधान और सुधारा हुआ कोड

पहला तरीका: इफेक्ट ऑब्जेक्ट को क्लिप पर लागू करें।

from moviepy import *
import moviepy.video.fx as vfx
from moviepy.video.fx import MultiplySpeed
source_clip = VideoFileClip(r"xxx.mp4")
faster_clip = MultiplySpeed(2).apply(source_clip)
faster_clip.write_videofile("output_fast.mp4", codec="libx264")

विकल्प: क्लिप पर with_effects() के जरिए इफेक्ट जोड़ें।

from moviepy import *
import moviepy.video.fx as vfx
from moviepy.video.fx import MultiplySpeed
src = VideoFileClip(r"xxx.mp4")
accelerated = src.with_effects([MultiplySpeed(2)])
accelerated.write_videofile("output_fast.mp4", codec="libx264")

यह एक व्यावहारिक रूपांतर है जो गति को चार गुना करता है और एक नेस्टेड आउटपुट पथ पर लिखता है:

from moviepy import *
import moviepy.video.fx as vfx
from moviepy.video.fx import MultiplySpeed
video_pathname = r"xxxxxx.mp4"
base = VideoFileClip(video_pathname)
boosted = base.with_effects([MultiplySpeed(4)])
boosted.write_videofile("Random/output_fast.mp4", codec="libx264")

यह क्यों मायने रखता है

‘क्लिप’ और ‘इफेक्ट’ की सीमा समझ लेना समय बचाता है और उलझाने वाली त्रुटियों से बचाता है। क्लिप का API तभी सुरक्षित रहता है जब आप सही VideoFileClip (या उससे व्युत्पन्न क्लिप) बनाए रखते हैं और उसी पर इफेक्ट्स लगाते हैं—उलटा नहीं। आप चाहें तो इफेक्ट पर स्पष्ट apply() इस्तेमाल करें या क्लिप पर संक्षिप्त with_effects(), दोनों तरीके पाइपलाइन को भरोसेमंद और कोड को पढ़ने योग्य रखते हैं।

निष्कर्ष

जब MoviePy में वीडियो की गति बढ़ानी हो, तो अपने क्लिप वेरिएबल को इफेक्ट ऑब्जेक्ट से दोबारा असाइन न करें। क्लिप लोड करें, MultiplySpeed को apply() या with_effects() के साथ लगाएं, और फिर write_videofile से रेंडर करें। यही छोटा सा अंतर AttributeError को हटाता है और आपकी प्रोसेसिंग चेन को साफ और संभालने लायक बनाए रखता है।

यह लेख StackOverflow पर प्रश्न (लेखक — Sharks Charlatans) और furas के उत्तर पर आधारित है।