Script Bash (Linux/Mac)
#!/bin/bash
INPUT_DIR="./videos" # Ganti dengan path folder kamu
OUTPUT_DIR="./output" # Folder hasil output
mkdir -p "$OUTPUT_DIR"
counter=1
# Loop semua file mp4 dan ts
for file in "$INPUT_DIR"/*.mp4 "$INPUT_DIR"/*.ts; do
# Skip jika file tidak ada
[ -f "$file" ] || continue
new_name="video${counter}"
echo "Processing: $file -> ${new_name}"
# Convert ke MP4
ffmpeg -i "$file" \
-c:v libx264 \
-c:a aac \
-preset fast \
-crf 23 \
"$OUTPUT_DIR/${new_name}.mp4" \
-y
# Generate Thumbnail (ambil frame di detik ke-5)
ffmpeg -i "$OUTPUT_DIR/${new_name}.mp4" \
-ss 00:00:05 \
-vframes 1 \
-q:v 2 \
"$OUTPUT_DIR/${new_name}.jpg" \
-y
echo "✓ Done: ${new_name}.mp4 + ${new_name}.jpg"
echo "---"
((counter++))
done
echo "Selesai! Total: $((counter-1)) file diproses"Script Windows (PowerShell)
$InputDir = "C:\Videos" # Ganti path kamu
$OutputDir = "C:\Output" # Folder hasil
New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
$counter = 1
# Ambil semua file mp4 dan ts
$files = Get-ChildItem -Path $InputDir -Include "*.mp4","*.ts" -File
foreach ($file in $files) {
$newName = "video$counter"
Write-Host "Processing: $($file.Name) -> $newName"
# Convert ke MP4
ffmpeg -i "$($file.FullName)" `
-c:v libx264 `
-c:a aac `
-preset fast `
-crf 23 `
"$OutputDir\$newName.mp4" `
-y
# Generate Thumbnail (frame di detik ke-5)
ffmpeg -i "$OutputDir\$newName.mp4" `
-ss 00:00:05 `
-vframes 1 `
-q:v 2 `
"$OutputDir\$newName.jpg" `
-y
Write-Host "Done: $newName.mp4 + $newName.jpg"
$counter++
}
Write-Host "Selesai! Total: $($counter-1) file"Penjelasan Parameter FFmpeg
| Parameter | Fungsi |
|---|---|
-c:v libx264 | Codec video H.264 (paling kompatibel) |
-c:a aac | Codec audio AAC |
-preset fast | Kecepatan encode (fast/medium/slow) |
-crf 23 | Kualitas video (0=terbaik, 51=terburuk, 18-28 ideal) |
-ss 00:00:05 | Ambil thumbnail di detik ke-5 |
-vframes 1 | Ambil 1 frame saja |
-q:v 2 | Kualitas JPG (2=terbaik, 31=terburuk) |
-y | Overwrite otomatis tanpa konfirmasi |
Cara Pakai
Linux/Mac:
chmod +x script.sh
./script.shWindows:
Klik kanan script.ps1 -> Run with PowerShellTips Tambahan
Jika video kurang dari 5 detik, ganti
-ss 00:00:05dengan-ss 00:00:01
Jika ingin kualitas lebih tinggi, ganti
-crf 23dengan-crf 18
Jika ingin proses lebih cepat (tanpa re-encode jika sudah mp4):
Untuk file yang sudah MP4, bisa copy stream langsung
ffmpeg -i input.mp4 -c copy output.mp4Fix untuk Git Bash di Windows
Error terjadi karena backtick (`) adalah syntax PowerShell, bukan Bash. Di Git Bash pakai backslash (\$ untuk line continuation.
Script untuk Git Bash (Windows)
Buat file convert.sh:
#!/bin/bash
INPUT_DIR="/c/Videos" # Ganti path folder kamu
OUTPUT_DIR="/c/Output" # Ganti path output
# Contoh jika di Desktop:
# INPUT_DIR="/c/Users/NamaKamu/Desktop/videos"
# OUTPUT_DIR="/c/Users/NamaKamu/Desktop/output"
mkdir -p "$OUTPUT_DIR"
counter=1
for file in "$INPUT_DIR"/*.mp4 "$INPUT_DIR"/*.ts; do
[ -f "$file" ] || continue
new_name="video${counter}"
echo "Processing: $file -> ${new_name}"
# Convert ke MP4
ffmpeg -i "$file" -c:v libx264 -c:a aac -preset fast -crf 23 "$OUTPUT_DIR/${new_name}.mp4" -y
# Generate Thumbnail di detik ke-5
ffmpeg -i "$OUTPUT_DIR/${new_name}.mp4" -ss 00:00:05 -vframes 1 -q:v 2 "$OUTPUT_DIR/${new_name}.jpg" -y
echo "Done: ${new_name}.mp4 + ${new_name}.jpg"
echo "---"
((counter++))
done
echo "Selesai! Total: $((counter-1)) file diproses"Cara Pakai di Git Bash
# 1. Masuk ke folder tempat script disimpan
cd /c/Users/NamaKamu/Desktop
# 2. Beri izin execute
chmod +x convert.sh
# 3. Jalankan
./convert.shFormat Path di Git Bash
| Windows Path | Git Bash Path |
|---|---|
C:\Videos | /c/Videos |
C:\Users\Budi\Desktop | /c/Users/Budi/Desktop |
D:\MyFiles | /d/MyFiles |
Atau Jalankan Langsung Tanpa Script
Jika malas buat file, jalankan langsung di Git Bash:
mkdir -p /c/Output && counter=1 && for file in /c/Videos/*.mp4 /c/Videos/*.ts; do [ -f "$file" ] || continue; ffmpeg -i "$file" -c:v libx264 -c:a aac -preset fast -crf 23 "/c/Output/video${counter}.mp4" -y && ffmpeg -i "/c/Output/video${counter}.mp4" -ss 00:00:05 -vframes 1 -q:v 2 "/c/Output/video${counter}.jpg" -y && echo "Done video${counter}" && ((counter++)); doneGanti /c/Videos dan /c/Output sesuai path kamu