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


Cara Pakai

Linux/Mac:

chmod +x script.sh
./script.sh

Windows:

Klik kanan script.ps1 -> Run with PowerShell

Tips Tambahan

Jika video kurang dari 5 detik, ganti -ss 00:00:05 dengan -ss 00:00:01

Jika ingin kualitas lebih tinggi, ganti -crf 23 dengan -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.mp4

Fix 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.sh

Format Path di Git Bash

Windows PathGit 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++)); done
Ganti /c/Videos dan /c/Output sesuai path kamu