< Back

Optimalkan Proses Render Banyak Video dengan FFmpeg

November 17, 2024


Pernahkah Anda menggabungkan banyak video menggunakan FFmpeg dan merasa proses render-nya terlalu lama? FFmpeg adalah alat yang sangat powerful untuk mengolah video dan audio, mulai dari mengonversi format, memotong, hingga menggabungkan file. Namun, ada kalanya proses penggabungan video memakan waktu lebih lama dari yang diharapkan, terutama jika jumlah video yang digabungkan cukup banyak.

Pada tulisan ini, saya akan membagikan cara mengoptimalkan proses penggabungan video menggunakan FFmpeg agar lebih cepat dan efisien.

Contoh Command yang Digunakan

Berikut adalah command FFmpeg yang saya gunakan untuk merender semua video yang ada dalam folder:

const ffmpegCommand = `ffmpeg -f concat -safe 0 -i ${fileListPath} -c:v libx264 -pix_fmt yuv420p -c:a aac -strict experimental ${mergedVideoPath}`;

CONTOH

Masalah:
Saat menggabungkan 50 video, prosesnya memakan waktu sekitar 2 menit. Namun, jika hanya 30 video, prosesnya hanya memakan waktu sekitar 30 detik. Kenapa bisa demikian?

Saya akan membahas penyebab masalah tersebut dan bagaimana cara mengoptimalkan proses penggabungan video menggunakan FFmpeg.

Penyebab Masalah

Setelah memeriksa beberapa artikel dan diskusi di forum FFmpeg, ada beberapa faktor yang dapat memengaruhi kecepatan penggabungan video. Beberapa faktor utama yang memengaruhi waktu render antara lain:

  1. Beban Pembacaan File yang Lebih Banyak:
    Semakin banyak video yang digabungkan, semakin banyak file yang harus dibaca oleh FFmpeg. Ini dapat menyebabkan overhead yang lebih besar, sehingga memengaruhi kecepatan proses.
  2. Proses Pengkodean Ulang yang Intensif:
    Jika FFmpeg mengkodekan ulang video (misalnya dengan codec libx264), maka prosesnya bisa berlangsung lebih lama. Waktu proses encoding sangat bergantung pada ukuran, durasi video, dan kompleksitas kompresi video.
  3. File Sementara yang Dihasilkan:
    FFmpeg sering membuat file sementara saat menggabungkan video. Jika jumlah video yang digabungkan sangat banyak, ini dapat memperlambat proses karena banyaknya file sementara yang harus dikelola.

Solusi dan Optimisasi

Untuk mengatasi masalah ini, berikut adalah beberapa cara yang bisa dilakukan untuk mengoptimalkan proses penggabungan video dengan FFmpeg:

1. Hindari Pengkodean Ulang (Re-encoding) Jika Tidak Diperlukan

Jika video yang ingin digabungkan sudah menggunakan codec yang sesuai dan tidak perlu perubahan kualitas atau format, lebih baik menghindari pengkodean ulang. Dengan menggunakan opsi -c:v copy dan -c:a copy, kita dapat langsung menyalin stream video dan audio tanpa harus mengkodekan ulang, yang tentunya akan lebih cepat.

Command FFmpeg untuk menyalin stream tanpa encoding ulang:

ffmpeg -f concat -safe 0 -i filelist.txt -c:v copy -c:a copy output.mp4

Penjelasan:

  • -c:v copy: Menyalin stream video tanpa encoding ulang.
  • -c:a copy: Menyalin stream audio tanpa encoding ulang.
  • -safe 0: Membaca daftar file yang menggunakan path absolut (bukan relatif).

Dengan cara ini, FFmpeg hanya akan menggabungkan video tanpa melakukan proses encoding ulang, yang tentu saja lebih cepat.

2. Gunakan Opsi -vsync untuk Sinkronisasi Frame

Jika video yang digabungkan memiliki frame rate yang berbeda, masalah sinkronisasi mungkin terjadi. Untuk mengatasi masalah ini, Anda bisa menggunakan opsi -vsync vfr agar frame tetap disinkronkan dengan baik.

Command FFmpeg dengan sinkronisasi frame:

ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -pix_fmt yuv420p -c:a aac -strict experimental -vsync vfr output.mp4

Penjelasan:

  • -vsync vfr: Mengatur sinkronisasi frame secara variabel untuk menangani video dengan frame rate yang berbeda.

3. Menggunakan Penyimpanan Sementara yang Cepat

Proses penggabungan video akan lebih cepat jika file sementara disimpan di lokasi dengan kecepatan baca/tulis yang tinggi, seperti SSD. Anda dapat mengarahkan FFmpeg untuk menggunakan folder sementara tertentu dengan opsi -temp_dir.

Perintah FFmpeg dengan direktori sementara:

ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -pix_fmt yuv420p -c:a aac -strict experimental -temp_dir /path/to/tempdir output.mp4

4. Batching Proses Penggabungan

Jika Anda memiliki banyak video untuk digabungkan, salah satu cara yang dapat mempercepat proses adalah dengan melakukan penggabungan dalam batch kecil. Sebagai contoh, Anda bisa menggabungkan video dalam kelompok 30-40 video terlebih dahulu, lalu menggabungkan file hasil tersebut menjadi satu file akhir.

Langkah-langkahnya:

  1. Gabungkan 30 video pertama.
  2. Gabungkan 30 video kedua.
  3. Gabungkan dua file hasil penggabungan di atas menjadi satu file.

Meskipun ini membutuhkan beberapa langkah tambahan, cara ini bisa membantu mempercepat proses, terutama jika file yang digabungkan terlalu besar untuk diproses dalam satu langkah.

Kesimpulan

Menggabungkan banyak video menggunakan FFmpeg bisa menjadi proses yang memakan waktu, tergantung pada beberapa faktor seperti jumlah file, jenis pengkodean yang digunakan, dan kapasitas perangkat keras. Untuk mengoptimalkan proses ini, beberapa langkah yang dapat Anda lakukan antara lain:

  • Hindari pengkodean ulang jika tidak diperlukan.
  • Gunakan opsi sinkronisasi frame jika video memiliki frame rate yang berbeda.
  • Gunakan direktori sementara yang cepat untuk mempercepat proses.
  • Pertimbangkan untuk memecah penggabungan video menjadi beberapa batch kecil.

Dengan mengikuti tips ini, Anda dapat mempercepat proses penggabungan video dengan FFmpeg dan menghemat waktu render. Semoga tulisan ini bermanfaat!

© 2024

@abimanyudrmwn