Otomatisasi Sinkronisasi Subtitle Film dengan Python & FFmpeg

Aditya Y PradhanaAditya Y Pradhana/
Otomatisasi Sinkronisasi Subtitle Film
Otomatisasi Sinkronisasi Subtitle Film

Pernah enggak sih, lagi asyik-asyiknya mau maraton nonton koleksi film kesayangan di media server lokal, eh pas dinyalain ternyata subtitle-nya desync? Teksnya sudah keluar duluan saat karakter filmnya baru mau membuka mulut, atau malah kebalikannya—suaranya sudah beres, teksnya baru nongol 5 detik kemudian.

Dulu, cara paling klasik (dan menyiksa) buat beresin masalah ini adalah pakai subtitle shifter manual. Kita mesti buka player, hitung jeda waktu pakai stopwatch, nebak-nebak milidetik, lalu geser delay-nya manual. Lebih parah lagi kalau desync-nya tipe progressive (makin lama durasi film, makin jauh gesernya gara-gara beda frame rate antara 23.976 fps dan 25 fps).

Tapi tenang, sebagai tech enthusiast atau admin server yang malas buang-buang waktu untuk hal repetitif, kita punya solusi yang jauh lebih cerdas: menggunakan otomatisasi algoritma sinyal suara!

Di artikel kali ini, saya mau bagikan trik simpel memasang ffsubsync di server Linux agar seluruh koleksi subtitle film kita bisa tersinkronisasi otomatis tanpa perlu dites ulang satu per satu.

Bagaimana Benda Ini Bekerja?

Berbeda dengan aplikasi shifter jadul yang cuma paham perintah "maju 2 detik" atau "mundur 3 detik", tools bernama ffsubsync (Speech-to-Subtitle Synchronization) karya developer bernama Stephen Macke ini bekerja dengan cara yang sangat elegan:

  • Voice Activity Detection (VAD): Dia tidak peduli bahasa apa yang ada di subtitle. Tools ini memindai audio track pada file video untuk mendeteksi gelombang frekuensi vokal manusia—mencatat kapan ada adegan percakapan dan kapan adegan hening.

  • Cross-Correlation & FFT: File subtitle .srt milik kita diubah menjadi bentuk sinyal biner. Kemudian, dengan algoritma Fast Fourier Transform, pola sinyal teks tersebut ditempelkan dan dicocokkan secara presisi dengan gelombang suara dari audio film.

Hasilnya? Mau subtitle-nya acak-acakan di awal, tengah, atau beda frame rate, ffsubsync bisa mengoreksi dan menguncinya secara pas hanya dalam hitungan detik!

Cara Install System-Wide di Linux Server

Agar tools ini bisa dipanggil dari direktori mana saja oleh user maupun skrip otomatisasi di server, kita bisa menginstalnya secara system-wide menggunakan pipx.

1. Install Dependencies

Pastikan server Linux/Ubuntu Anda sudah memiliki FFmpeg (untuk ekstrak audio) dan pipx:

sudo apt update
sudo apt install -y ffmpeg python3-pip python3-venv pipx

2. Pasang ffsubsync Secara Global

Gunakan perintah berikut agar virtual environment-nya rapi di folder /opt dan binary-nya bisa diakses umum via /usr/local/bin:

sudo PIPX_HOME=/opt/pipx PIPX_BIN_DIR=/usr/local/bin pipx install ffsubsync

Cek apakah instalasi berhasil dengan perintah:

ffsubsync --version

Cara Pakai: Dari Single File Sampai Massal (Batch Process)

Cara menggunakannya sangat simpel. Cukup sebutkan file video dan file subtitle yang geser.

Sinkronisasi Satu File

ffsubsync "Film_A.mkv" -i "Film_A_Unsync.srt" -o "Film_A_Sync.srt"

Jika tidak mau bikin file baru dan ingin langsung menimpa file .srt yang rusak:

ffsubsync "Film_A.mp4" -i "Film_A.srt" --overwrite

Magic Script: Auto-Sync Satu Folder Koleksi Film

Jika Anda memiliki puluhan film di folder media server (seperti Jellyfin atau Plex) yang subtitle-nya berantakan, jangan jalankan satu per satu. Pakai looping bash sederhana ini:

# Masuk ke folder koleksi film Anda
cd /path/to/koleksi/film/

# Eksekusi otomatis untuk semua pasang video & srt yang namanya sama
for video in *.{mkv,mp4,avi}; do
  base="${video%.*}"
  if [ -f "$base.srt" ]; then
    echo "Sedang menyelaraskan subtitle untuk: $video..."
    ffsubsync "$video" -i "$base.srt" --overwrite
  fi
done

Kesimpulan

Teknologi seperti ffsubsync ini adalah bukti nyata bagaimana otomatisasi dan pemrosesan sinyal digital bisa menyelesaikan masalah kecil yang menjengkelkan dalam kehidupan sehari-hari kita sebagai penikmat media lokal.

Sekrung, koleksi film di server pribadi sudah rapi, subtitle pas di bibir pemeran, dan yang paling penting: tidak perlu lagi buang waktu ngepasin milidetik secara manual!

Selamat mencoba di server masing-masing, ya! 🚀

Sumber

https://github.com/smacke/ffsubsync