🧩 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. 🚀