Apa itu ffmpeg dan manipulasi video
Saya sendiri on/off soal procedural generation app, saya sebenernya suka sekali ngulik - ngulik video/grafis generation walaupun belum banyak yang bisa saya share. Tulisan berikut mungkin berantakan (karena lebih seperti note, daripada tulisan), tujuan dari tulisan berikut adalah mengenalkan ffmpeg secepat mungkin dengan beberapa contoh perintah.
ffmpeg dikenal sebagai satu - satunya perangkat lunak terbuka manipulasi video terlengkap. Proyek ffmpeg ini dirilis sebagai perangkat lunak terbuka pada tahun 2000, dan terus dikembangkan sampai sekarang. Mungkin banyak yang mengenal ffmpeg dengan kompresi video-nya - tapi banyak juga kok perintah - perintah, pada ffmpeg ini yang memungkinkan kita untuk membuat video editor.
Installasi / Pemasangan
Saya suka menggunakan ffmpeg static build download saja dan tinggal taruh folder bin
atau symlink. Untuk platform lain silahkan untuk menuju dokumentasi resmi.
Untuk windows
# untuk linux cara symlink
$ ln -s ~/path/to/downloaded/build/ffmpeg ~/.local/bin/
# setelah itu tinggal diakses dengan, ingat taruh di bin agar dapat diakses secara global
$ ffmpeg
Jangan lupa juga ffprobe, dan ffplay sekalian dipasang.
Untuk nodejs saya sering menggunakan ffmpeg-static
Cara baca command
Perintah dibawah digunakan untuk merubah video .mp4
ke .webm
. ffmpeg akan otomatis akan menggunakan konfigurasi default (enconding, bitrate, dkk) dan mengkonversi jenis video ke .webm
$ ffmpeg -i input.mp4 output.avi
Perintah dibawah adalah perintah untuk mengkompresi video dan merubah encoding menjadi webm.
$ ffmpeg -i source.mp4 -c:v libvpx-vp9 -b:v 1M -c:a libopus -b:a 128k target.webm
Nah untuk perintah kedua ini mari kita pecah satu - satu, agar lebih jelas.
-i source.mp4
Ini digunakan untuk mengambil input video-c:v
opsi inic
untuk codec danv
untuk video (bagian codec akan saya jelaskan nanti)-b:v
b
disini adalah video bitrate (akan saya jelaskan dibawah)-c:a
dan-b:a
sama seperti diatas tapi ini untuk audio
ffmpeg selain bisa menformat Video bisa juga digunakan untuk memformat Audio. Jadi kita bisa optimisasikan sebuah Video baik itu melalui Audio bitrate maupun Video. Bagian berikutnya lagi saya akan mendemokan soal complex filter dan buffer chaining di ffmpeg.
ffmpeg Complex Filter
[main]
input --> split ---------------------> overlay --> output
| ^
|[tmp] [flip]|
+-----> crop --> vflip -------+
Nuaah ~ sampe sini nih, menurut saya ini adalah bagian menarik dari ffmpeg, filter. Filter pada ffmpeg dapat digunakan pada file gambar maupun video. Filter pada ffmpeg dapat menggunakan buffer chaining yang artinya kita dapat menggabungkan 2 atau lebih proses filter pada ffmpeg. Berikut adalah diagram yang ada pada dokumentasi. Silahkan download video berikut dan jalankan command ffmpeg dibawah untuk mempraktekkan, dengan contoh command pada dokumentasi.
$ ffmpeg -i input.mp4 -vf "split [main][tmp]; [tmp] crop=iw:ih/2:0:0, vflip [flip]; [main][flip] overlay=0:H/2" output.mp4
Diagram diatas menjelaskan bahwa proses pada ffmpeg dapat dibagi beberapa buah. Menggunankan libavfilter
filter pada ffmpeg dapan menerima banyak output dan menghasilkan banyak output pula. Ini adalah konsep buffer chaining yang ingin saya tekankan, karena konsep ini sangat berguna untuk video processing maupun video prosedural generatif. Mari kita pecah satu persatu.
Input video dimasukan kedalam proses split, menghasilakn 2 buffer. satu dinamakan [main]
satu lagi [tmp]
, [tmp]
melalui proses crop
di potong video-nya, lalu dibalik (diputer 180') dengan vflip
menghasilkan output [flip]
. Kedua [main]
dan [flip]
yang dihasilkan lalu digabung menggunakan overlay, dengan aturan setengah dari tinggi video tersebut. Mari kita lihat hasil dari perintah tersebut.
iw
input width. ih
input heigt. iw:ih/x:y:keep_aspect
memotong video berdasarkan posisi, keep_aspect
untuk menentukan aspect ratio dari sebuah video. 0:H/2
, dalam overlay tempatkan input overlay ke-setengah tinggi dari video tujuan
Chroma Key
Biasa dikenal seperti Green Screen Keying, sebuah proses penghapusan warna dari video - warna tersebut lalu dapat diganti dengan hal lain - seperti background video atau yang lainnya. Berikut contoh perintah dan penjelasan.
$ ffmpeg -i <base-video> -i <overlay-video> -filter_complex '[1:v]colorkey=0x<color>:<similarity>:<blend>[ckout];[0:v][ckout]overlay[out]' -map '[out]' <output-file>
Baris pertama [1:v]colorkey=0x<color>:<similarity>:<blend>[ckout];
nuaaaah, [1:v]
mengakses video greenscreen hapus warna (saya memakai 0x3BBD1E) hijaunya, lalu mengeluarkan output [ckout]
.
Baris kedua [0:v][ckout]overlay[out]
, nah karena pada ffmpeg, ditaruh pertama maka akan di proses duluan. Perintah berikut dapat diartiakn menaruh [ckout]
(video green screen wanita) diatas [0:v]
(background_hacktoberfest.png) dan menghasilkan output [out]
.
Penggunaan -map [out] output-file.mp4
adalah memilih hasil output mana yang harus diikutkan ke dalam file final.
.mov merupakan ekstensi video yang bisa transparan, seperti .png dan .webp kalau dalam konteks grafis
Bitrate, Framerate, dan Encoding
Bitrate, pada ffmepg bitrate dimaksudkan adalah seberapa banyak bits (byte) yang diproses oleh FFMPEG dalam satu waktu, semakin besar bitrate semakin besar pula ukuran file. Dalam ffmpeg opsi ini biasanya dipanggil dengan -b
.
Framerate (FPS-Frame per second), semakin tinggi Framerate maka semakin halus pergerakan di sebuah video, semakin tinggi juga mempengaruhi size video. Kebanyakan video sudah bagus ditayangkan di 30FPS.
Encoding, dalam ffmpeg bisa dikatakan adalah sebuah proses untuk mengubah format file, contoh dari mp4
ke webp
. Ffmpeg mempunya buaaaaanyaaak sekali codecs ~ yang saya sendiri jarang pakai haha. Bisa dilihat di sini.
ffprobe dan ffplay
ffprobe, biasanya digunakan untuk mengambil dan mengubah metadata pada sebuah video, seperti judul, tanggal, dan yang lain.
ffplay, media player praktis dari ffmepg.
Sumber belajar
- Tentu dokumentasi, dan dokumentasi lagi
- composite operation, sering saya gunakan sebagai referensi jenis jenis overlay dan bagaimana sifatnya
- Saya sering browsing di video.stackexchange kebanyakan yang jawab pertanyaan maintainer ffmepg sendiri
- Dan tidak lupa pula di Youtube, banyak sekali contoh operasi command ffmpeg.