Mewarnai video hitam putih dengan AI (DeOldify) + ffmpeg

Secara teknis, video hitam putih bisa diwarnai ulang (colorization). AI memprediksi warna alami dari objek: langit, daun, kulit, dan lainnya. Kita pecah video jadi frame, warnai setiap frame, lalu gabungkan kembali dan sinkronkan audionya. Di sini kamu dapat alur kerja sederhana + skrip praktis.

Bagaimana proses pewarnaan video hitam putih bekerja

  • AI colorization: Model dilatih dengan jutaan foto/video berwarna untuk memprediksi warna alami. Misalnya langit โ†’ biru, daun โ†’ hijau, kulit manusia โ†’ tone natural.
  • Frame-by-frame: Video dipecah jadi frame gambar, tiap frame diwarnai, lalu digabung lagi.
  • Manual + semi-otomatis: Editor bisa kasih petunjuk warna (mask/region), sisanya diisi otomatis.

Alat yang bisa dipakai

  • DeOldify (open source): Populer untuk foto & video lama, berbasis Python/deep learning.
  • DaVinci Resolve: Profesional; kombinasi dengan plugin/AI untuk colorization.
  • Adobe After Effects/Premiere Pro: dengan plugin pihak ketiga untuk pewarnaan dan koreksi.
  • Topaz Video AI: peningkatan kualitas; beberapa kasus bisa bantu colorization.
  • Online tools: cepat untuk video pendek, tapi terbatas resolusi/durasi.

Catatan hasil

  • Akurasi: tidak selalu 100% (warna baju/objek tertentu bisa salah tebak).
  • Kombinasi: hasil terbaik pakai AI + koreksi manual (grading).
  • Kualitas sumber: semakin bagus kualitas asli, semakin enak diwarnai.

Workflow praktis dengan ffmpeg + DeOldify

Berikut alur sederhana yang bisa kamu jalankan di Linux/macOS/Windows (dengan Python dan ffmpeg terpasang). Kita ekstrak frame, warnai dengan DeOldify, lalu gabungkan kembali dan re-attach audio.

1) Siapkan lingkungan

# Pastikan ffmpeg terpasang
# macOS (Homebrew)
brew install ffmpeg
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y ffmpeg
# Windows: install ffmpeg dari situs resmi, lalu tambahkan ke PATH

# Buat environment Python (opsional, dianjurkan)
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Install dependensi DeOldify (versi minimal)
pip install torch torchvision
pip install fastai==1.0.60
pip install deoldify==0.6.0  # jika tersedia; alternatif: pakai repo source

2) Ekstrak frame dari video

# Struktur folder
mkdir -p work/frames work/colorized

# Ekstrak frame (simpan sebagai PNG untuk kualitas)
# Ganti input.mp4 dengan video hitam putih kamu
ffmpeg -i input.mp4 -qscale:v 1 work/frames/frame_%05d.png

# Ekstrak audio (jika ada)
ffmpeg -i input.mp4 -vn -acodec copy work/audio.aac

3) Warnai frame dengan DeOldify (Python)

Kita gunakan DeOldify โ€œartisticโ€ untuk warna yang menarik; bisa ganti ke โ€œstableโ€ untuk warna lebih natural. Contoh skrip Python di bawah ini membaca semua frame dan menyimpan versi berwarna ke folder work/colorized.

# colorize_frames.py
import os
from pathlib import Path
from PIL import Image
import torch

# DeOldify imports (pastikan deoldify tersedia)
from deoldify import device
from deoldify.device import DeviceId
from deoldify.visualize import get_artistic_image_colorizer, get_stable_image_colorizer

# Pakai GPU jika tersedia, kalau tidak otomatis CPU
device.set(DeviceId.GPU if torch.cuda.is_available() else DeviceId.CPU)

# Pilih model: artistic atau stable
colorizer = get_artistic_image_colorizer()  # alternatif: get_stable_image_colorizer()

frames_dir = Path("work/frames")
out_dir = Path("work/colorized")
out_dir.mkdir(parents=True, exist_ok=True)

# Parameter render: bisa di-tuning
render_factor = 35  # naikkan untuk detail, turunkan untuk speed/warna lembut

frames = sorted(frames_dir.glob("frame_*.png"))
print(f"Memproses {len(frames)} frame...")

for i, frame_path in enumerate(frames, 1):
    try:
        result = colorizer.get_transformed_image(
            str(frame_path),
            render_factor=render_factor,
            post_process=True
        )
        # Simpan
        out_path = out_dir / frame_path.name
        result.save(str(out_path))
        if i % 50 == 0:
            print(f"  >> {i}/{len(frames)} frame diwarnai...")
    except Exception as e:
        print(f"  !! Gagal memproses {frame_path.name}: {e}")

print("Selesai mewarnai semua frame.")

4) Gabungkan kembali frame menjadi video berwarna

# Gabungkan frame berwarna jadi video (sesuaikan framerate)
# Untuk framerate yang sama dengan input, bisa baca dari ffmpeg -i input.mp4
ffmpeg -framerate 25 -i work/colorized/frame_%05d.png -c:v libx264 -pix_fmt yuv420p work/colorized_noaudio.mp4

# Tempelkan audio asli (jika diekstrak)
ffmpeg -i work/colorized_noaudio.mp4 -i work/audio.aac -c:v copy -c:a aac -b:a 192k -shortest output_colorized.mp4

Tips hasil lebih bagus

  • Render factor: coba nilai 28โ€“40. Terlalu tinggi bisa over-saturation atau artefak, terlalu rendah kurang detail.
  • Stabil vs artistik: โ€œstableโ€ untuk warna natural, โ€œartisticโ€ untuk warna lebih hidup/dramatis.
  • Preprocessing: naikkan resolusi dengan upscaler (mis. waifu2x untuk animasi, Topaz untuk video) sebelum colorization.
  • Grading akhir: pakai editor (Resolve/Premiere) untuk koreksi warna global dan konsistensi antar scene.
  • Berkas besar: proses per segmen (split video per bab) untuk menghindari kehabisan RAM/VRAM.
Intinya: ekstrak frame โ†’ colorize dengan DeOldify โ†’ gabungkan dengan ffmpeg โ†’ re-attach audio โ†’ lakukan color grading akhir. Simpel, modular, dan bisa diulang untuk proyek lain.
Ilustrasi proses colorization video dengan DeOldify
Gunakan gambar preview 1200ร—630 agar share ke media sosial optimal.