एक क्लिक में macOS स्क्रिप्ट का उपयोग करके MP4 फ़ाइलों को लूपिंग WebP GIF-शैली एनिमेशन में बदलें

क्लाइंट और ऐप डेवलपमेंट के काम के लिए, मुझे अक्सर इसकी आवश्यकता होती है वीडियो सामग्री को शीघ्रता से देखें:

  • उत्पाद प्रबंधकों के लिए पूर्वावलोकन एनिमेशन
  • दस्तावेज़ों या पीआरडी के लिए डेमो क्लिप
  • सोशल पोस्ट या लैंडिंग पेज के लिए हल्का मोशन

इन मामलों में, एक MP4 फ़ाइल से कुछ मुख्य फ़्रेम निकालकर उन्हें लूपिंग WebP एनिमेशन में बदलना। आमतौर पर इतना ही काफी होता है—और यह पूरा वीडियो अपलोड करने की तुलना में काफी हल्का होता है।.

यह लेख एक जानकारी साझा करता है। macOS के लिए एक-क्लिक शेल स्क्रिप्ट वह:

  • यह MP4 फ़ाइल से 6-12 समान दूरी वाले फ़्रेम निकालता है।
  • उनका आकार बदलकर 720px चौड़ाई का कर देता है
  • लूपिंग वेबपी एनीमेशन बनाता है
  • और स्वचालित रूप से इंस्टॉल हो जाता है एफएफएमपेग अगर यह गायब है

यह सब टर्मिनल में एक ही कमांड से चलता है।.


1. स्क्रिप्ट क्या करती है

macOS पर, स्क्रिप्ट extract_even_frames_webp.sh प्रदान करता है:

  1. स्वचालित एफएफएमपेग पता लगाना और स्थापना
    • जाँच करता है कि एफएफएमपेग उपलब्ध है
    • यदि नहीं, तो होमब्रू (यदि आवश्यक हो) स्थापित करता है और फिर इंस्टॉल करता है। एफएफएमपेग
  2. यहां तक कि फ्रेम निष्कर्षण भी
    • वीडियो की अवधि की गणना करता है
    • समान रूप से नमूने 6–12 फ्रेम पूरे क्लिप में
    • डिफ़ॉल्ट रूप से 6 फ़्रेम होते हैं, लेकिन आप इनकी संख्या को अपनी आवश्यकतानुसार बदल सकते हैं।
  3. WebP एनिमेशन जनरेशन
    • निकाले गए PNG फ़्रेमों को एक साथ मिलाता है लूपिंग वेबपी
    • आउटपुट चौड़ाई है 720px डिफ़ॉल्ट रूप से (ऊंचाई आनुपातिक रूप से समायोजित होती है)
    • गुणवत्ता को इसके माध्यम से समायोजित किया जा सकता है -q:v
  4. स्वचालित सफाई
    • मध्यवर्ती फ़्रेमों को एक अस्थायी निर्देशिका में संग्रहीत करता है
    • WebP जनरेट होने के बाद अस्थायी डायरेक्टरी को हटा देता है
  5. यह छोटे और लंबे दोनों प्रकार के वीडियो के साथ काम करता है।
    • यदि वीडियो बहुत छोटा है, तो फ्रेम की संख्या स्वचालित रूप से कम हो जाती है।
    • लंबे वीडियो के लिए, फ्रेम हमेशा पूरी अवधि में समान रूप से फैले होते हैं।

2. यह आंतरिक रूप से कैसे काम करता है

स्क्रिप्ट के पीछे का मूल तर्क यह है।.

2.1 निर्भरताओं की जाँच करें

स्क्रिप्ट सबसे पहले यह जांच करती है कि क्या एफएफएमपेग स्थापित है:

  • उपयोग command -v ffmpeg
  • यदि नहीं मिलता है, तो यह जाँच करता है शराब बनाना
    • यदि Homebrew मौजूद नहीं है, तो यह Homebrew को इंस्टॉल कर देता है।
    • फिर उपयोग करता है brew install ffmpeg स्थापित करने के लिए एफएफएमपेग

2.2 वीडियो की अवधि प्राप्त करें

का उपयोग करते हुए एफएफ़प्रोब, स्क्रिप्ट में लिखा है कि वीडियो की कुल लंबाई (सेकंड में).
इसके आधार पर और वांछित फ्रेम संख्या के आधार पर, यह फ्रेमों के बीच समय अंतराल की गणना करता है।.

2.3 समान रूप से नमूना फ्रेम

प्रत्येक फ्रेम इंडेक्स के लिए, यह:

  • टाइमस्टैम्प की गणना करता है = सूचकांक × अंतराल
  • उपयोग ffmpeg -ss उस समय स्थिति पर जाने के लिए
  • यह ठीक एक फ्रेम निकालता है
  • इसे इसके साथ स्केल करता है स्केल=720:-1 इसलिए चौड़ाई 720px है और ऊंचाई आनुपातिक है।

2.4 वेबपी एनिमेशन बनाएं

सभी फ़्रेमों को PNG के रूप में सहेजे जाने के बाद, स्क्रिप्ट कॉल करती है एफएफएमपेग पुनः:

  • इन्हें क्रम से पढ़ें (%03d.png)
  • इन्हें एनिमेटेड वेबपी के रूप में एन्कोड करें
  • तय करना -लूप 0 इसलिए एनीमेशन अनिश्चित काल तक चलता रहता है
  • गुणवत्ता को नियंत्रित करें -q:v 70 (कम मान = बेहतर गुणवत्ता, बड़ी फ़ाइल)

2.5 सफाई

सभी मध्यवर्ती PNG फ़ाइलें एक अस्थायी निर्देशिका में संग्रहीत की जाती हैं जिसे इसके द्वारा बनाया गया है mktemp -d.
WebP जनरेट होने के बाद, उस डायरेक्टरी को हटा दिया जाता है। आरएम -आरएफ.


3. पूर्ण शेल स्क्रिप्ट: extract_even_frames_webp.sh

आप निम्नलिखित स्क्रिप्ट को इस रूप में सहेज सकते हैं। extract_even_frames_webp.sh अपने मैक पर:

#!/bin/bash

# Usage: ./extract_even_frames_webp.sh input.mp4 output.webp [frames]
# frames is optional, default 6, maximum 12

INPUT="$1"
OUTPUT="$2"
FRAMES="${3:-6}"

# Cap maximum frames at 12
if [ "$FRAMES" -gt 12 ]; then
    FRAMES=12
fi

if [ -z "$INPUT" ] || [ -z "$OUTPUT" ]; then
    echo "Usage: $0 input.mp4 output.webp [frames]"
    exit 1
fi

# ---------------------------------
# 1️⃣ Check ffmpeg
# ---------------------------------
if ! command -v ffmpeg >/dev/null 2>&1; then
    echo "⚠️ ffmpeg not found, starting installation..."
    if ! command -v brew >/dev/null 2>&1; then
        echo "⚠️ Homebrew not found, installing Homebrew..."
        /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
        echo "✅ Homebrew installed"
    else
        echo "✅ Homebrew already installed"
    fi
    brew update
    brew install ffmpeg
    if ! command -v ffmpeg >/dev/null 2>&1; then
        echo "❌ ffmpeg installation failed, please check manually"
        exit 1
    fi
    echo "🎉 ffmpeg installed successfully!"
else
    echo "✅ ffmpeg is already installed"
fi

# ---------------------------------
# 2️⃣ Get video duration
# ---------------------------------
DURATION=$(ffprobe -v error -show_entries format=duration -of csv=p=0 "$INPUT")
if [[ -z "$DURATION" ]]; then
    echo "❌ Failed to get video duration"
    exit 1
fi
DURATION=${DURATION%.*}  # integer seconds

# If video is shorter than requested frames, match frame count to duration
if [ "$DURATION" -lt "$FRAMES" ]; then
    FRAMES=$DURATION
fi

echo "📹 Video length: ${DURATION}s, extracting $FRAMES frames evenly"

# ---------------------------------
# 3️⃣ Create temporary directory
# ---------------------------------
TMPDIR=$(mktemp -d)

# ---------------------------------
# 4️⃣ Calculate interval
# ---------------------------------
INTERVAL=$(echo "scale=6; $DURATION/$FRAMES" | bc)
echo "⏱ Frame interval: $INTERVAL seconds"

# ---------------------------------
# 5️⃣ Extract frames
# ---------------------------------
for i in $(seq 0 $(($FRAMES-1))); do
    TIME=$(echo "$i * $INTERVAL" | bc)
    printf -v FILENAME "%03d.png" $((i+1))
    ffmpeg -ss "$TIME" -i "$INPUT" -frames:v 1 -vf "scale=720:-1" \
        "$TMPDIR/$FILENAME" -hide_banner -loglevel error
done

# ---------------------------------
# 6️⃣ Generate animated WebP
# ---------------------------------
ffmpeg -y -i "$TMPDIR/%03d.png" -vcodec libwebp -lossless 0 -q:v 70 \
    -loop 0 -preset picture "$OUTPUT" -hide_banner -loglevel error

# ---------------------------------
# 7️⃣ Clean up
# ---------------------------------
rm -rf "$TMPDIR"

echo "🎉 Done! Generated file: $OUTPUT"

4. macOS पर स्क्रिप्ट का उपयोग कैसे करें

  1. स्क्रिप्ट को सेव करें ऊपर दी गई सामग्री को इस रूप में सहेजें extract_even_frames_webp.sh, उदाहरण के लिए, आपकी होम डायरेक्टरी में।.
  2. इसे निष्पादन की अनुमति दें
chmod +x extract_even_frames_webp.sh
  1. बुनियादी उपयोग
./extract_even_frames_webp.sh input.mp4 output.webp

यह करेगा:

  • जांचें या स्थापित करें एफएफएमपेग
  • समान दूरी पर स्थित 6 फ्रेम निकालें
  • उत्पन्न आउटपुट.वेबपी 720px चौड़ाई पर
  1. फ़्रेमों की संख्या निर्दिष्ट करें (6–12)
./extract_even_frames_webp.sh input.mp4 output.webp 8

इससे डिफ़ॉल्ट 6 फ़्रेमों के बजाय 8 फ़्रेम निकाले जाएँगे।.


5. यह कार्यप्रणाली क्यों उपयोगी है?

वीडियो एडिटर को मैन्युअल रूप से खोलने या जीयूआई कनवर्टर पर क्लिक करने की तुलना में, इस स्क्रिप्ट के कुछ फायदे हैं:

  1. कोई मैनुअल सेटअप नहीं।
    • स्वचालित रूप से इंस्टॉल हो जाता है एफएफएमपेग (और जरूरत पड़ने पर होमब्रू का इस्तेमाल भी कर सकते हैं)
    • इंस्टॉलर खोजने या कमांड याद रखने की कोई आवश्यकता नहीं है।
  2. स्मार्ट फ्रेम सैंपलिंग
    • छोटे वीडियो क्लिप के लिए, यह फ्रेम की संख्या को स्वचालित रूप से कम कर देता है।
    • लंबे वीडियो के लिए, फ्रेम हमेशा पूरी अवधि में समान रूप से फैले होते हैं।
  3. गुणवत्ता और आकार नियंत्रण
    • -q:v यह आपको फ़ाइल आकार के अनुसार WebP गुणवत्ता को समायोजित करने की सुविधा देता है।
    • स्केल=720:-1 यह वेब के अनुकूल चौड़ाई और एक समान आस्पेक्ट रेशियो प्रदान करता है।
  4. डिफ़ॉल्ट रूप से लूपिंग
    • -लूप 0 यह वेबपी एनिमेशन को हमेशा के लिए लूप में फंसा देता है।
    • दस्तावेज़ों या साइटों पर पूर्वावलोकन, डेमो और सूक्ष्म गति दिखाने के लिए बेहतरीन।
  5. डिस्क उपयोग को साफ़ करें
    • अस्थायी PNG फ्रेम एक अस्थायी फ़ोल्डर में संग्रहीत होते हैं और बाद में हटा दिए जाते हैं।
    • समय के साथ कोई भी अनुपलब्ध फाइलें जमा नहीं होंगी।

6. उदाहरण: 20 सेकंड की MP4 फ़ाइल को WebP पूर्वावलोकन में बदलना

कल्पना कीजिए कि आपके पास एक है 20 सेकंड का फ़ीचर डेमो वीडियो और भाग खड़ा हुआ:

./extract_even_frames_webp.sh demo.mp4 demo-preview.webp 6

स्क्रिप्ट में निम्नलिखित कार्य होंगे:

  • लगभग अंतराल की गणना करें 3.33 सेकंड
  • 6 फ्रेम निकालें 0 सेकंड, 3.33 सेकंड, 6.66 सेकंड, 10 सेकंड, 13.33 सेकंड, 16.66 सेकंड
  • इनका आकार बदलकर 720px चौड़ाई का कर दें।
  • एक का निर्माण करें लूपिंग वेबपी एनिमेशन

फिर आप इस WebP फ़ाइल को इसमें डाल सकते हैं:

  • उत्पाद दस्तावेज़ या फ़ेशू/नोशन दस्तावेज़ को हल्का पूर्वावलोकन
  • सोशल पोस्ट या लैंडिंग पेज के रूप में ऑटो-प्लेइंग मोशन थंबनेल
  • पीपीटी प्रेजेंटेशन और आंतरिक डेमो के लिए, जहां पूरा वीडियो अनावश्यक होगा।

7. विस्तार के लिए विचार

यह स्क्रिप्ट एक शुरुआती बिंदु है—आप इसे आसानी से अपने कार्यप्रवाह के अनुसार बदल सकते हैं:

  1. गतिशील फ्रेम गणना
    • वीडियो की लंबाई के आधार पर स्वचालित रूप से 6-12 फ्रेम चुनें
    • उदाहरण के लिए, लंबे क्लिप के लिए अधिक फ्रेम ताकि अधिक अवस्थाएँ दिखाई जा सकें।
  2. अनुकूलित आकार
    • परिवर्तन स्केल=720:-1 आपकी उत्पाद टीम द्वारा पसंद की गई किसी भी चौड़ाई तक
    • या चौड़ाई को एक पैरामीटर के रूप में प्रदर्शित करें: ./script.sh in.mp4 out.webp 8 1080
  3. प्रचय संसाधन
    • सभी प्रक्रियाओं को पूरा करने के लिए इस स्क्रिप्ट को एक और लूप में लपेटें। .mp4 एक फ़ोल्डर में फ़ाइलें
    • यह तब उपयोगी होता है जब आप एक साथ कई फीचर डेमो एक्सपोर्ट करते हैं।

लेखक का नोट

यह स्क्रिप्ट मेरे वास्तविक macOS डेवलपमेंट वर्कफ़्लो से ली गई है, जिसका उपयोग MP4 वीडियो को हल्के WebP प्रीव्यू में बदलने के लिए किया जाता है। मैं इसे रोज़ाना क्लाइंट डेवलपमेंट में दस्तावेज़ों और सोशल पोस्ट के लिए डेमो एनिमेशन बनाने में उपयोग करता हूँ। GPT का उपयोग केवल इस लेख के अंग्रेज़ी संस्करण के अनुवाद, संरचना और परिष्करण में सहायता के लिए किया गया है—स्क्रिप्ट का लॉजिक, कार्यान्वयन विवरण और उपयोग के तरीके सभी मेरे अपने प्रोजेक्ट अनुभव से लिए गए हैं।.

लेखक के बारे में

पोस्ट साझा करें:

AI के साथ सारांशित करें

विषयसूची

जुड़े रहो

अधिक अपडेट

भर्ती प्रक्रिया में मैं वास्तव में एआई का उपयोग कैसे करता हूँ: 7 व्यावहारिक मानव संसाधन कार्यप्रवाह (और बचने योग्य 6 गलतियाँ)

1. “एचआर + एआई” अवधारणा स्तर तक ही क्यों सीमित नहीं रह सकता? पिछले एक वर्ष में, एचआर में एआई के बारे में काफी चर्चा हुई है।

मैंने AI का उपयोग करके 200 से अधिक लोगों के लिए कंपनी की वर्षगांठ का कार्यक्रम कैसे आयोजित किया: प्रशासनिक कार्यप्रवाह का संपूर्ण विवरण

एक प्रशासक के तौर पर, साल के सबसे बड़े प्रोजेक्ट्स में से एक हमेशा कंपनी की सालगिरह का कार्यक्रम या वार्षिक उत्सव होता है। यह कभी भी सिर्फ "एक बुकिंग करना" जैसा काम नहीं होता।

WAN 2.6 त्वरित आरंभ मार्गदर्शिका

WAN 2.6 के सह-लॉन्च पार्टनर के रूप में, Ima Studio में हमने पिछले दो हफ्तों में इसकी मुख्य क्षमताओं का गहन परीक्षण किया है। आज इसका समापन हो रहा है।