Cara Betulkan Warna Video Underwater yang Biru dengan FFmpeg (Percuma)
Video dalam air jadi biru sebab air menyerap cahaya merah. Cara paling mudah betulkan secara percuma ialah penapis colorlevels dalam FFmpeg: ia meregangkan saluran merah, hijau dan biru secara berasingan supaya merah yang tinggal sedikit itu dibesarkan semula. Satu arahan, tanpa perisian berbayar.
Saya guna cara ini pada 16 klip jerung paus yang saya rakam pada 25 Oktober 2026. Di bawah ada arahan penuh, cara laras nilai untuk klip anda sendiri, dan apa yang tak menjadi.
| Perkara | Maklumat |
|---|---|
| Perisian | FFmpeg (percuma; Windows, macOS, Linux) |
| Penapis utama | colorlevels |
| Masa belajar | 10 minit |
| Sesuai untuk | Klip MP4/MOV dari kamera aksi, kamera compact atau telefon |
| Tak sesuai untuk | Rakaman terlalu dalam tanpa lampu (merah sudah tiada langsung) |
| Klip saya | 16 klip, 1080p 60fps |

Kiri: rakaman asal. Kanan: selepas satu arahan colorlevels.
Kenapa video dalam air jadi biru?
Sebab cahaya merah diserap air dalam beberapa meter pertama. Jingga dan kuning hilang selepas itu, dan yang sampai ke kamera hanya biru dan hijau.
Saya ukur satu klip jerung paus saya. Purata setiap saluran warna, daripada skala 0 hingga 100%:
| Saluran | Purata dalam klip asal |
|---|---|
| Merah | 4% |
| Hijau | 30% |
| Biru | 69% |
Merah bukan sifar, cuma terlalu kecil. Kerja kita ialah besarkan semula bahagian yang kecil itu.
Apa arahan FFmpeg untuk betulkan warna?
Ini arahan penuh yang saya uji pada klip jerung paus:
ffmpeg -i klip.MOV -vf "colorlevels=rimin=0:rimax=0.50:gimin=0.08:gimax=0.78:bimin=0.30:bimax=0.97,hqdn3d=3:3:0:0,unsharp=5:5:0.4,format=yuv420p" -c:v libx264 -crf 20 -c:a aac -b:a 192k klip-baru.mp4
Maksud setiap bahagian:
colorlevels: tetapkan titik paling gelap (min) dan paling cerah (max) untuk setiap saluran.rimax=0.50bermaksud “anggap merah 50% sebagai merah penuh”, jadi merah digandakan.hqdn3d=3:3:0:0: kurangkan noise. Saluran merah yang dibesarkan memang berbintik.unsharp=5:5:0.4: tajamkan sedikit.format=yuv420p: pastikan video boleh dimainkan di telefon dan WhatsApp. Tanpa ini, FFmpeg hasilkan format 4:4:4 yang banyak pemain tak sokong.-crf 20: kualiti. Nombor lebih kecil = fail lebih besar dan lebih cantik.
Pasang FFmpeg dahulu: brew install ffmpeg di macOS, winget install ffmpeg di Windows, atau sudo apt install ffmpeg di Ubuntu.
Macam mana nak laras nilai untuk klip sendiri?
Uji pada satu bingkai dahulu, jangan terus proses seluruh video. Arahan ini keluarkan satu gambar pada saat ke-8:
ffmpeg -ss 8 -i klip.MOV -frames:v 1 -vf "colorlevels=rimin=0:rimax=0.50:gimin=0.08:gimax=0.78:bimin=0.30:bimax=0.97" uji.jpg
Buka uji.jpg, kemudian ubah satu nilai setiap kali:
| Masalah pada gambar | Ubah nilai |
|---|---|
| Masih terlalu biru | Kecilkan rimax (cuba 0.40) |
| Jadi merah jambu atau ungu | Besarkan rimax (cuba 0.60) |
| Air nampak pudar, kurang kontras | Besarkan bimin (cuba 0.35) |
| Air jadi terlalu gelap | Kecilkan bimin (cuba 0.20) |
| Kulit atau pasir kehijauan | Besarkan gimax (cuba 0.85) |
Petua: klip cetek (snorkeling, 1 hingga 3 meter) masih ada banyak merah, jadi cuba mula dengan rimax=0.75. Klip dalam perlukan nilai lebih kecil.
Apa yang tak menjadi?
Dua cara lain yang nampak lebih mudah, tetapi gagal pada klip saya.
Penapis grayworld. Ia cuba imbangkan warna secara automatik dengan andaian purata gambar ialah kelabu. Dalam air terbuka, andaian itu salah: air jadi kelabu kehijauan dan buih jadi jingga.

Kiri: grayworld. Kanan: colorlevels.
Tambah merah sahaja. Menaikkan saluran merah dengan colorchannelmixer atau colorbalance tanpa menurunkan biru menghasilkan jerung berwarna ungu. Warna perlu diregangkan pada ketiga-tiga saluran, bukan ditambah pada satu.
Pengalaman saya: 16 klip jerung paus
Arahan di atas ialah versi ringkas. Untuk hasil akhir, saya guna versi lebih panjang dengan bantuan AI coding agent: skrip yang ukur setiap klip dan bina jadual warna (LUT) tersendiri, sebab kedalaman dan cahaya setiap klip berbeza.

Semua 16 klip, sebelum (kiri) dan selepas (kanan).
Tiga perkara yang saya belajar:
- Jangan guna denoise merentas masa pada buih. Render pertama saya mencomotkan buih dan penyelam yang bergerak laju. Sebab itu arahan di atas guna
hqdn3d=3:3:0:0: dua sifar terakhir mematikan bahagian yang membandingkan bingkai dengan bingkai. - Warna “betul” bukan warna paling terang. Percubaan pertama menjadikan jerung paus keperangan macam gangsa. Nampak dramatik, tetapi salah. Jerung paus sebenarnya kelabu kebiruan dengan tompok putih, dan saya ulang sampai dapat warna itu.
- Cahaya permukaan mudah jadi jingga. Bila merah dibesarkan, bahagian paling cerah (buih, pantulan matahari) bertukar jingga. Penyelesaiannya ialah kurangkan warna pada bahagian cerah sahaja.
Fail akhir saya simpan sebagai HEVC 10-bit; 16 klip jadi 3.7 GB. Untuk kongsi di media sosial, H.264 dengan -crf 20 seperti arahan di atas sudah memadai.
Macam mana proses satu folder sekali gus?
Guna gelung. Di macOS atau Linux:
mkdir -p siap
for f in *.MOV; do
ffmpeg -i "$f" -vf "colorlevels=rimin=0:rimax=0.50:gimin=0.08:gimax=0.78:bimin=0.30:bimax=0.97,hqdn3d=3:3:0:0,unsharp=5:5:0.4,format=yuv420p" -c:v libx264 -crf 20 -c:a aac -b:a 192k "siap/${f%.*}.mp4"
done
Satu set nilai jarang sesuai untuk semua klip. Asingkan klip cetek dan klip dalam ke folder berbeza dan guna nilai rimax yang berlainan.
Bacaan berkaitan
- 6 tips dan teknik asas untuk edit video
- Ambil kira 5 setting ini bila mula buat video
- Snorkeling di Pulau Perhentian Kecil: 8 gambar GoPro serta video
Semua arahan diuji dengan FFmpeg 8.1 pada 5 November 2026. Gambar ialah bingkai daripada rakaman saya sendiri.
Soalan Lazim
Kenapa video dalam air jadi biru atau hijau?
Air menyerap cahaya merah dahulu, kemudian jingga dan kuning. Pada kedalaman beberapa meter, hampir tiada cahaya merah yang sampai ke kamera, jadi rakaman tinggal biru dan hijau. Dalam satu klip saya, purata saluran merah hanya 4% berbanding 69% untuk biru.
Boleh betulkan warna video underwater tanpa perisian berbayar?
Boleh. FFmpeg percuma untuk Windows, macOS dan Linux. Penapis colorlevels meregangkan setiap saluran warna secara berasingan, dan satu arahan sudah cukup untuk kebanyakan klip.
Perlu guna penapis merah (red filter) pada kamera?
Penapis merah membantu pada kedalaman kira-kira 5 hingga 20 meter kerana ia mengimbangi warna sebelum rakaman. Tanpa penapis pun warna masih boleh dipulihkan dengan FFmpeg, tetapi noise pada saluran merah akan lebih ketara.
Kenapa penapis grayworld FFmpeg tak sesuai untuk video dalam air?
Grayworld mengandaikan purata gambar sepatutnya kelabu. Dalam air terbuka, hampir seluruh bingkai memang biru, jadi penapis itu menukar air menjadi kelabu kehijauan dan buih menjadi jingga.
Arahan ini boleh guna untuk video GoPro, Insta360 atau telefon?
Boleh. FFmpeg membaca fail MP4 dan MOV daripada mana-mana kamera. Nilai colorlevels perlu dilaras ikut kedalaman dan warna air setiap klip.