🎬 Script FFmpeg: Gabung Semua Video .mp4 + Versi Tanpa Audio 🔇

Kadang kita punya banyak file video .mp4 yang tersebar di satu folder, dan pengen langsung digabung jadi satu video utuh tanpa ribet. Nah, di bawah ini ada dua script shell siap pakai untuk Linux: versi biasa dan versi tanpa-audio (tanpa suara).

🧩 Script 1 — Gabung Semua .mp4 (dengan suara)

Script ini akan membuat daftar semua file .mp4 di folder kamu, lalu menggabungkannya secara otomatis jadi satu video utuh. Aman dijalankan di Linux terminal.


#!/bin/bash
# Script: gabung_video.sh
# Menggabungkan semua file .mp4 menjadi satu video utuh
# Dibuat oleh: ChatGPT (Fakhrul Rijal Edition 🎞️)
rm -f daftar.txt
for f in *.mp4; do
 echo "file '$PWD/$f'" >> daftar.txt
done
ffmpeg -f concat -safe 0 -i daftar.txt -c copy hasil_gabungan.mp4
rm -f daftar.txt
echo "✅ Video berhasil digabung: hasil_gabungan.mp4"
 

🔇 Script 2 — Gabung Semua .mp4 Jadi Video Tanpa Audio

Ini versi upgrade-nya: selain gabung semua video, script ini otomatis menghapus audio. Cocok buat kamu yang cuma butuh tampilan visual aja tanpa suara.


#!/bin/bash
# =========================================
# Script: gabung_video_tanpa-audio.sh
# Fungsi: Menggabungkan semua file .mp4 menjadi satu video Tanpa Audio (tanpa suara)
# Fitur: Deteksi otomatis codec/resolusi — re-encode jika tidak seragam
# =========================================
set -e
OUTPUT="${1:-hasil_gabungan_tanpa-audio.mp4}"
rm -f daftar.txt temp_*.mp4
FILES=( *.mp4 )
if [ ${#FILES[@]} -eq 0 ]; then
 echo "❌ Tidak ditemukan file .mp4 di folder ini."
 exit 1
fi
REF="${FILES[0]}"
REF_INFO=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,r_frame_rate -of csv=p=0 "$REF")
REENCODE_NEEDED=false
for f in "${FILES[@]}"; do
 INFO=$(ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,width,height,r_frame_rate -of csv=p=0 "$f")
 if [ "$INFO" != "$REF_INFO" ]; then
 REENCODE_NEEDED=true
 fi
done
if [ "$REENCODE_NEEDED" = true ]; then
 for f in "${FILES[@]}"; do
 ffmpeg -y -i "$f" -an -c:v libx264 -preset veryfast -crf 23 "temp_$f"
 echo "file 'temp_$f'" >> daftar.txt
 done
else
 for f in "${FILES[@]}"; do
 echo "file '$PWD/$f'" >> daftar.txt
 done
fi
ffmpeg -f concat -safe 0 -i daftar.txt -an -c:v libx264 -preset veryfast -crf 23 "$OUTPUT"
rm -f daftar.txt temp_*.mp4 2>/dev/null || true
echo "✨ Selesai! 📽️ Video tanpa-audio hasil: $OUTPUT"