Untuk pekerjaan pengembangan klien dan aplikasi, saya sering membutuhkan... visualisasikan konten video dengan cepat:
- pratinjau animasi untuk manajer produk
- klip demo untuk dokumen atau PRD
- Animasi ringan untuk postingan media sosial atau halaman arahan.
Dalam kasus-kasus ini, Mengekstraksi beberapa bingkai kunci dari file MP4 dan mengubahnya menjadi animasi WebP yang berulang. biasanya sudah cukup—dan jauh lebih ringan daripada mengunggah video lengkap.

Artikel ini membagikan skrip shell sekali klik untuk macOS itu:
- mengekstrak 6–12 frame yang berjarak sama dari file MP4
- mengubah ukurannya menjadi lebar 720px
- membuat animasi WebP berulang
- dan menginstal secara otomatis
ffmpegjika hilang
Semua ini dijalankan dari satu perintah di Terminal.
1. Apa yang dilakukan skrip tersebut
Di macOS, skripnya extract_even_frames_webp.sh menyediakan:
- Otomatis
ffmpegdeteksi dan pemasangan- Memeriksa apakah
ffmpegtersedia - Jika tidak, instal Homebrew (jika diperlukan) dan kemudian instal
ffmpeg
- Memeriksa apakah
- Ekstraksi bingkai yang merata
- Menghitung durasi video
- Sampel merata 6–12 bingkai di sepanjang klip tersebut
- Secara default, jumlah frame adalah 6, tetapi Anda dapat menyesuaikan jumlahnya.
- Pembuatan animasi WebP
- Menggabungkan frame PNG yang diekstrak menjadi sebuah perulangan WebP
- Lebar keluaran adalah 720px Secara default (tinggi diskalakan secara proporsional)
- Kualitas dapat disesuaikan melalui
-q:v
- Pembersihan otomatis
- Menyimpan frame perantara di direktori sementara.
- Menghapus direktori sementara setelah WebP dihasilkan.
- Dapat digunakan untuk video pendek maupun panjang.
- Jika videonya sangat pendek, jumlah frame akan dikurangi secara otomatis.
- Untuk video yang lebih panjang, frame selalu diberi jarak yang sama sepanjang durasi video.
2. Bagaimana cara kerjanya di balik layar
Berikut logika dasar di balik skrip ini.
2.1 Periksa dependensi
Skrip tersebut pertama-tama memeriksa apakah ffmpeg terpasang:
- Kegunaan
perintah -v ffmpeg - Jika tidak ditemukan, maka akan dilakukan pengecekan.
buatan- Jika Homebrew tidak ada, maka Homebrew akan diinstal.
- Kemudian menggunakan
instal ffmpeg dengan perintah brewuntuk memasangffmpeg
2.2 Mengambil durasi video
Menggunakan ffprobe, naskah tersebut berbunyi total durasi video dalam detik.
Berdasarkan hal ini dan jumlah frame yang diinginkan, program akan menghitung interval waktu antar frame.
2.3 Mengambil sampel bingkai secara merata
Untuk setiap indeks bingkai, maka:
- Menghitung stempel waktu =
indeks × interval - Kegunaan
ffmpeg -ssuntuk melompat ke posisi waktu tersebut - Mengekstrak tepat satu bingkai
- Mengukurnya dengan
skala=720:-1jadi lebarnya 720px dan tingginya proporsional
2.4 Membuat animasi WebP
Setelah semua frame disimpan sebagai PNG, skrip akan memanggil... ffmpeg sekali lagi ke:
- Bacalah secara berurutan (
%03d.png) - Encode mereka sebagai WebP animasi.
- Mengatur
-loop 0jadi animasi tersebut berulang tanpa henti - Kendalikan kualitas dengan
-q:v 70(nilai lebih rendah = kualitas lebih tinggi, ukuran file lebih besar)
2.5 Bersihkan
Semua file PNG perantara disimpan dalam direktori sementara yang dibuat oleh mktemp -d.
Setelah WebP dihasilkan, direktori tersebut dihapus dengan rm -rf.
3. Skrip shell lengkap: extract_even_frames_webp.sh
Anda dapat menyimpan skrip berikut sebagai extract_even_frames_webp.sh di Mac Anda:
#!/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. Cara menggunakan skrip di macOS
- Simpan skripnya Simpan konten di atas sebagai
extract_even_frames_webp.sh, misalnya di direktori beranda Anda. - Berikan izin eksekusi.
chmod +x extract_even_frames_webp.sh
- Penggunaan dasar
./extract_even_frames_webp.sh input.mp4 output.webp
Ini akan:
- Periksa atau pasang
ffmpeg - Ekstrak 6 bingkai yang berjarak sama
- Menghasilkan
output.webpdengan lebar 720px
- Tentukan jumlah bingkai (6–12)
./extract_even_frames_webp.sh input.mp4 output.webp 8
Ini akan mengekstrak 8 frame, bukan 6 frame seperti default.
5. Mengapa alur kerja ini bermanfaat
Dibandingkan dengan membuka editor video secara manual atau mengklik melalui konverter GUI, skrip ini memiliki beberapa keunggulan:
- Tidak ada pengaturan manual sama sekali
- Menginstal secara otomatis
ffmpeg(dan Homebrew jika diperlukan) - Tidak perlu mencari installer atau mengingat perintah.
- Menginstal secara otomatis
- Pengambilan sampel bingkai cerdas
- Untuk klip pendek, jumlah frame akan dikurangi secara otomatis.
- Untuk video yang lebih panjang, frame selalu diberi jarak yang sama sepanjang durasi video.
- Kontrol kualitas dan ukuran
-q:vMemungkinkan Anda untuk menyesuaikan kualitas WebP versus ukuran file.skala=720:-1memberikan lebar yang ramah web dan rasio aspek yang konsisten
- Pengulangan secara default
-loop 0membuat animasi WebP berulang tanpa henti- Sangat cocok untuk pratinjau, demo, dan gerakan halus pada dokumen atau situs web.
- Bersihkan penggunaan disk.
- Bingkai PNG sementara disimpan dalam folder sementara dan dihapus setelahnya.
- Tidak ada berkas sisa yang menumpuk seiring waktu.
6. Contoh: mengubah MP4 berdurasi 20 detik menjadi pratinjau WebP
Bayangkan Anda memiliki sebuah Video demo fitur berdurasi 20 detik dan jalankan:
./extract_even_frames_webp.sh demo.mp4 demo-preview.webp 6
Skrip tersebut akan:
- Hitung interval sekitar 3,33 detik
- Ekstrak 6 frame pada
0 detik, 3,33 detik, 6,66 detik, 10 detik, 13,33 detik, 16,66 detik - Ubah ukurannya menjadi lebar 720px.
- Bangun sebuah perulangan WebP animasi
Anda kemudian dapat memasukkan WebP ini ke dalam:
- Dokumen produk atau dokumen Feishu/Notion sebagai pratinjau ringan
- Postingan media sosial atau halaman arahan sebagai thumbnail bergerak yang diputar otomatis
- Presentasi PowerPoint dan demo internal di mana video lengkap akan terlalu berlebihan.
7. Ide untuk pengembangan lebih lanjut
Skrip ini adalah titik awal—Anda dapat dengan mudah menyesuaikannya dengan alur kerja Anda sendiri:
- Jumlah frame dinamis
- Secara otomatis memilih antara 6–12 frame berdasarkan panjang video.
- misalnya lebih banyak frame untuk klip yang lebih panjang untuk menampilkan lebih banyak negara bagian
- Ukuran khusus
- Mengubah
skala=720:-1dengan lebar apa pun yang disukai tim produk Anda. - Atau tampilkan lebar sebagai parameter:
./script.sh in.mp4 out.webp 8 1080
- Mengubah
- Pemrosesan batch
- Bungkus skrip ini dalam perulangan lain untuk memproses semuanya.
.mp4berkas-berkas dalam sebuah folder - Berguna saat Anda mengekspor sejumlah demo fitur sekaligus.
- Bungkus skrip ini dalam perulangan lain untuk memproses semuanya.
Catatan penulis
Skrip ini berasal dari alur kerja pengembangan macOS saya yang sebenarnya untuk mengubah video MP4 menjadi pratinjau WebP yang ringan. Saya menggunakannya dalam pengembangan klien sehari-hari untuk menghasilkan animasi demo untuk dokumentasi dan postingan media sosial. GPT hanya digunakan untuk membantu menerjemahkan, menyusun, dan menyempurnakan versi bahasa Inggris dari artikel ini—logika skrip, detail implementasi, dan pola penggunaan semuanya berasal dari pengalaman proyek saya sendiri.


