Menggunakan FFMPEG

FFMPEG adalah aplikasi command line untuk mengolah file video dan audio. Sering disebut orang sebagai swiss army of audio video karena serba guna dan segala bisa. Saya juga menggunakan ffmpeg untuk mengolah berbagai file video dan audio. Sekali kita menguasai opsi-opsinya, atau punya cheatsheet untuk berbagai situasi, kita tinggal copas saja perintahnya pada waktu dibutuhkan.

Buat mereka yang tidak ingin berurusan dengan command line, bisa juga menggunakan Handbrake, QWinFF, atau ShutterEncoder. Tapi kalau saya pribadi sih, lebih suka pakai command line saja.

Berikut adalah beberapa kegunaan dan perintah FFMPEG yang sering saya gunakan.

Merekam Screen

Pengguna MacOS sebenarnya bisa juga menggunakan Quicktime Player untuk merekam. Saya dulu juga pakai itu. Keunggulannya, dia sudah ada di MacOS sehingga kita tidak perlu menginstal aplikasi lain lagi. Kelemahannya, kalau kita set folder tujuan, maka ketika kita mengambil screenshot (untuk keperluan lain), maka folder tujuannya akan ikut pindah ke folder tujuan hasil screencast. Cukup menyebalkan. Jadi, sekarang saya pakai ffmpeg saja.

Pertama, kita cari tau dulu nama device yang akan kita gunakan untuk merekam. Perintahnya sebagai berikut:

ffmpeg -f avfoundation -list_devices true -i ""

Outputnya seperti ini

[AVFoundation indev @ 0x138604340] AVFoundation video devices:
[AVFoundation indev @ 0x138604340] [0] FaceTime HD Camera
[AVFoundation indev @ 0x138604340] [1] Capture screen 0
[AVFoundation indev @ 0x138604340] AVFoundation audio devices:
[AVFoundation indev @ 0x138604340] [0] Microsoft Teams Audio
[AVFoundation indev @ 0x138604340] [1] MacBook Pro Microphone
[AVFoundation indev @ 0x138604340] [2] Jabra MOVE v2.5.0

Ini menandakan bahwa ffmpeg berhasil menemukan perangkat video berikut:

  • FaceTime HD Camera : webcam laptop saya
  • Capture screen 0 : layar laptop

dan perangkat audio berikut:

  • Microsoft Teams Audio : audio driver yang diinstal aplikasi MS Teams
  • MacBook Pro Microphone : mic bawaan laptop
  • Jabra MOVE v2.5.0 : headset bluetooth saya yang kebetulan sedang terkoneksi

Setelah kita mendapatkan perangkatnya, kita bisa melakukan perekaman layar (video device index 1) dengan mengambil audio dari mic laptop (audio device index 1), dengan perintah berikut

ffmpeg -f avfoundation -i "1:1" recording-`date +%Y%m%d%H%M%S`.mkv

Sepengalaman saya, file yang dihasilkan, yaitu output.mkv, ukurannya kecil. Akan tetapi berat untuk diproses di Davinci Resolve. Entah apa encodingnya, saya lupa mengecek. Untuk itu, kita transcode dulu ke H264 dengan perintah berikut:

ffmpeg -i output.mkv -c:v h264_videotoolbox -c:a aac_at recording-`date +%Y%m%d%H%M%S`.mov

Atau kita bisa juga langsung record dengan encoding H264 sehingga tidak perlu konversi, dengan perintah berikut:

ffmpeg -f avfoundation -i "1:0" -c:v h264_videotoolbox -c:a aac_at recording-`date +%Y%m%d%H%M%S`.mov

Konversi untuk Whatsapp

Di tahun 2024 ini, saya masih banyak menggunakan kamera betulan, yaitu Nikon ZFC. Kualitas hasil, pilihan lensa, dan kontrol manualnya jauh lebih enjoyable digunakan daripada kamera hape. Setelah itu kita bisa mentransfer hasilnya dengan mudah menggunakan koneksi bluetooth atau wifi ke smartphone. Sehingga bisa langsung dishare. Akan tetapi, kadang saya juga perlu mengirim file video melalui laptop. Untuk itu, file dari kamera perlu dikecilkan terlebih dulu. Berikut perintahnya

ffmpeg -i DSC_3120.MOV -filter:v scale=480:-1 -c:v libx264 -c:a aac output.mp4

Atau bila kita tidak perlu suaranya, bisa kita hilangkan seperti ini

ffmpeg -i DSC_3120.MOV -filter:v scale=480:-1 -c:v libx264 -an output.mp4

Videonya saya resize menjadi 480p karena di hape toh layarnya kecil. Tidak perlu resolusi besar. Kirim file besarpun nanti akan dikompresi oleh whatsapp

Konversi untuk Instagram

File dari kamera biasanya horizontal dengan aspect ratio 16:9. Sedangkan Instagram formatnya vertikal dengan aspect ratio 9:16. Untuk mengkonversi video horizontal menjadi vertikal, berikut perintahnya

ffmpeg -i input.mp4 -vf 'scale=1280:720:force_original_aspect_ratio=decrease,pad=1280:720:(ow-iw)/2:(oh-ih)/2,setsar=1' output.mp4

Perintah di atas akan mengkonversi aspect ratio dan menambahkan black bar sebagai padding.

Bila kita ingin paddingnya berupa efek blur dari video asli, berikut perintahnya

ffmpeg -i input.mp4 -filter_complex "[0:v]scale=256/81*iw:256/81*ih,boxblur=luma_radius=min(h\,w)/40:luma_power=3:chroma_radius=min(cw\,ch)/40:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,setsar=1,crop=w=iw*81/256" output-vertical.mp4

Atau ini

ffmpeg -i input.mp4 -filter_complex '[0:v]scale=ih*16/9:-1,boxblur=luma_radius=min(h\,w)/20:luma_power=1:chroma_radius=min(cw\,ch)/20:chroma_power=1[bg];[bg][0:v]overlay=(W-w)/2:(H-h)/2,crop=h=iw*9/16' output-horizontal.mp4

Extract Audio

Jaman sekarang, banyak video kajian agama dan juga podcast di Youtube. Video seperti ini sebetulnya tidak perlu dilihat layarnya. Kita cuma butuh suaranya untuk kita dengarkan sambil olahraga atau selama di jalan menuju kantor. Untuk mengambil audio saja dari video, kita gunakan perintah berikut

ffmpeg -i video.mkv -vn -acodec libmp3lame audiofile.mp3

Membuat file GIF dari Video

Berikut perintahnya

ffmpeg -i input.mp4 -filter_complex "[0:v] fps=1,scale=w=480:h=-1,split [a][b];[a] palettegen=stats_mode=single [p];[b][p] paletteuse=new=1" output.gif

Atau bisa juga menggunakan perintah ini

ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1:flags=lanczos" -c:v gif animation.gif

Resize

Bila filenya terlalu besar, kita bisa kompresi lagi. Untuk podcast/kajian, yang terpenting adalah vokalnya jernih dan jelas. Tidak perlu seluruh spektrum frekuensi tampil maksimal. Berikut perintahnya

ffmpeg -i input.mp3 -map 0:a:0 -b:a 48k output.mp3 

Trim

Kadangkala, kita ingin memotong video/audio di menit sekian (starting point) sepanjang sekian menit (durasi). Perintahnya untuk file audio sebagai berikut

ffmpeg -ss 30 -t 70 -i input.mp3 -acodec copy outputfile.mp3

atau ini untuk video

ffmpeg -ss 00:02:30 -t 00:00:25 -i VID00006.AVI -filter:v scale=480:-1 -c:v libx264 -an  output.mp4

Penjelasan opsi:

  • -ss : starting point dengan format HH:mm:ss
  • -t : durasi file yang ingin dihasilkan
  • -i : nama file input
  • -acodec copy : bagian audio tetap menggunakan codec asli, tidak perlu transcoding
  • -filter:v scale=480:-1 : kalau mau diresize jadi 480p
  • -c:v libx264 : kalau mau ubah encoding menjadi H264
  • -an : menghilangkan audio

Menggabungkan Video

Misalnya kita memiliki beberapa file video yang mau kita gabung menjadi satu file. Kita bisa membuat file text berisi nama-nama file video tersebut, untuk kemudian diproses oleh ffmpeg. Bila nama filenya berurutan, kita tinggal jalankan perintah berikut

for f in *.mov; do echo "file '$f'" >> daftar-file.txt; done

Sehingga dia menghasilkan file yang isinya seperti ini

file 'file1.mov'
file 'file2.mov'
file 'file3.mov'

Kemudian kita proses dengan perintah berikut

ffmpeg -f concat -safe 0 -i daftar-file.txt -aspect 16:9 -c:v h264_videotoolbox -c:a libmp3lame `date +%Y%m%d`.mp4

Atau seperti ini bila kita tidak ingin mengubah encoding

ffmpeg -f concat -safe 0 -i daftar-file.txt -c:v copy -c:a copy `date +%Y%m%d`.mp4

Mengubah Aspect Ratio

Berikut adalah perintah untuk mengkonversi video dengan aspect ratio 4:3 menjadi 16:9

ffmpeg -i 2021071102.mp4 -aspect 16:9 -c:v libx264 -c:a copy 2021071102-fixed.mp4

Bila filenya banyak, dan sudah ada daftar file, jalankan perintah berikut

for f in *.mov; do ffmpeg -i "$f" -aspect 16:9 -c:v libx264 -c:a copy "${f%%.mov}-169".mp4; done

Konversi untuk TV Sony

Adakalanya kita mendapatkan file video yang tidak bisa dijalankan di TV. Ini biasanya disebabkan karena codec yang tidak didukung oleh merek TV tersebut. Berikut adalah perintah yang saya gunakan supaya file video bisa dijalankan di TV Sony saya. Perhatikan bahwa beda TV beda juga dukungan codecnya. Silahkan modifikasi codecnya supaya sesuai dengan dukungan di TV Anda.

ffmpeg -i input.mkv -c:a copy -c:v libx264 -profile:v main -pix_fmt yuv420p output.mkv

Bila video tersebut ada subtitlenya, berikut perintahnya

ffmpeg -i input.mkv -filter_complex "subtitles=input.mkv" -c:a copy output.mp4

Atau bila kita ingin mengeluarkan subtitlenya ke file terpisah, jalankan perintah berikut

ffmpeg -i input.mkv -map 0:s:0 output.srt

Demikianlah beberapa command ffmpeg yang sering saya gunakan. Bila nanti ada tambahan, artikel ini akan saya update.