💻 Menggabungkan Semua File MP4 di Linux dengan FFmpeg

Berikut dua script shell praktis untuk menggabungkan video MP4 di Linux. Satunya versi standar, dan satunya lagi versi tanpa-audio (tanpa suara).

🧩 Versi 1 — Script Normal (gabung-video-ffmpeg.sh)

Script ini digunakan untuk menggabungkan semua file .mp4 di folder menjadi satu video utuh. Script akan mendeteksi apakah semua file memiliki format sama (codec, resolusi, framerate). Jika berbeda, dia otomatis melakukan re-encode supaya hasilnya tetap mulus.

#!/bin/bash
# =========================================
# Script: gabung-video-ffmpeg.sh
# Fungsi: Menggabungkan semua file .mp4 dalam folder ini menjadi satu video
# Dibuat oleh: ChatGPT 😎
# =========================================
set -e
OUTPUT="${1:-hasil_gabungan.mp4}"
rm -f daftar.txt temp_*.mp4
echo "📂 Membuat daftar file .mp4..."
FILES=( *.mp4 )
if [ ${#FILES[@]} -eq 0 ]; then
 echo "❌ Tidak ada file .mp4 ditemukan."
 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
 echo "⚠️ Format berbeda pada: $f"
 REENCODE_NEEDED=true
 fi
done
if [ "$REENCODE_NEEDED" = true ]; then
 echo "♻️ Format tidak seragam — re-encode ke H.264..."
 for f in "${FILES[@]}"; do
 ffmpeg -y -i "$f" -c:v libx264 -preset veryfast -crf 23 -c:a aac -ar 48000 -b:a 192k "temp_$f"
 echo "file 'temp_$f'" >> daftar.txt
 done
else
 echo "✅ Semua file seragam — gabung langsung."
 for f in "${FILES[@]}"; do
 echo "file '$PWD/$f'" >> daftar.txt
 done
fi
ffmpeg -f concat -safe 0 -i daftar.txt -c copy "$OUTPUT"
rm -f daftar.txt temp_*.mp4 2>/dev/null || true
echo "✨ Selesai!"
echo "📽️ Video hasil: $OUTPUT"

🔇 Versi 2 — Script Tanpa Audio (gabung-video-ffmpeg_tanpa-audio.sh)

Kalau kamu ingin hasil video tanpa suara, gunakan versi tanpa-audio ini. Ia akan otomatis menghapus semua track audio dari video dan tetap mendukung re-encode bila format beda.

#!/bin/bash
# =========================================
# Script: gabung-video-ffmpeg_tanpa-audio.sh
# Fungsi: Menggabungkan semua file .mp4 menjadi satu video BISU (tanpa suara)
# Fitur: Deteksi otomatis codec/resolusi — re-encode jika tidak seragam
# Dibuat oleh: ChatGPT 🔇
# =========================================
set -e
OUTPUT="${1:-hasil_gabungan_tanpa-audio.mp4}"
rm -f daftar.txt temp_*.mp4
echo "📂 Membuat daftar file .mp4..."
FILES=( *.mp4 )
if [ ${#FILES[@]} -eq 0 ]; then
 echo "❌ Tidak ditemukan file .mp4."
 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
 echo "⚠️ Format berbeda terdeteksi: $f"
 REENCODE_NEEDED=true
 fi
done
if [ "$REENCODE_NEEDED" = true ]; then
 echo "♻️ Re-encode semua video tanpa audio..."
 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
 echo "✅ Format seragam — gabung langsung tanpa suara."
 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!"
echo "📽️ Video tanpa-audio hasil: $OUTPUT"

📘 Penutup

Dengan dua script di atas, kamu bisa menggabungkan semua file video di Linux secara otomatis, cepat, dan praktis. Mau ada suara atau tidak, semua bisa dikontrol cukup dengan menjalankan satu file .sh. Cocok untuk proyek dokumentasi, video laporan, atau kompilasi hasil rekaman. 🚀

✅ Script disalin ke clipboard!