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.