Tutorial Sinkronisasi Subtitle Dengan Cepat Hanya Hitungan Detik

Tutorial Sinkronisasi Subtitle Dengan Cepat Hanya Hitungan DetikPernah mengalami subtitle yang tidak sinkron dengan audio film? Tentu ini sangat mengganggu pengalaman menonton kita karena subtitle yang tidak sinkron ini membuat kita kesulitan mengikuti dialog di film tersebut. Di beberapa media player open-source sudah ada fitur Sync Subtitle namun ada kalanya di pertengahan film, subtitle nya kembali tidak sinkron dan harus dilakukan sinkronisasi ulang.

Berikut langkah-langkahnya:

1. Install Python

- Pilih Customize installation
- Pada Optional Features tidak perlu diubah apapun kemudian klik Next
- Pada Advanced Options tentukan lokasi install Python nya pada Drive :C buat folder instalasinya dengan klik Make New Folder

2. Mengatur Environment Variables

- Ketik pada kotak search Windows edit the system environment variables
- Masuk ke tab Advanced - Environment Variables
- Double click pada Variable Path - klik Browse
- Lalu cari folder Python - Scripts dan Python. Hasil akhirnya C:\Python\Scripts\ dan C:\Python\
- Untuk mengujinya silahkan buka Command Prompt dan ketikkan python, apabila ada muncul versi Pyhton yang terinstall maka prosesnya sudah berhasil

3. Download FFmpeg

- Download melalui: https://www.gyan.dev/ffmpeg/builds/
- Pilih "ffmpeg-git-full.7z"
- Kemudian extract pada drive :C
- Buka kembali Environment Variables seperti yang di step 2 diatas dan lakukan hal yang sama untuk menambahkan folder FFmpeg. Hasil akhirnya C:\ffmpeg dan C:\ffmpeg\bin
- Untuk mengujinya silahkan buka Command Prompt dan ketikkan ffmpeg, apabila ada muncul versi FFmpeg yang terinstall maka prosesnya sudah berhasil.

4. Install Grep via Chocolately Software

- Buka Windows PowerShell mode Run as administrator
- Ketik Get-ExecutionPolicy apabila muncul Restricted maka ketikkan Set-ExecutionPolicy AllSigned atau Set-ExecutionPolicy Bypass -Scope Process
- Kemudian ketikkan Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
- Apabila muncul Chocolately CLI (choco.exe) is now ready maka prosesnya sudah berhasil
- Buka Command Prompt sebagai Run as Administrator ketikkan choco install grep, setelah proses selesai ketikkan grep jika responya Usage: grep.exe [OPTION].... maka prosesnya sudah berhasil. Dokumentasi lengkap https://chocolatey.org/install#individual

5. Install ffsubsync

- Buka command prompt ketikkan pip install ffsubsync.

6. Melalukan Resync Subtitle

- Buka file .bat yang telah dibuat dengan Notepad++ (lihat kodenya dibawah)
- Pada baris set "lang=eng" silahkan ubah dengan Kode Bahasa di filmnya dan Simpan.
(Referensi: https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes).
Sebagai contoh saya resync subtitle film Love Letter (1995) dari Jepang maka saya ganti kode bahasa menjadi jpn.
- Blok film dan subtitle yang tidak sinkron kemudian drag & drop ke file .bat nya dan silahkan tunggu prosesnya. Saat saya coba hanya membutuhkan waktu 33 detik
- Hasil sync nya akan berada pada folder yang sama dengan filmnya.

Copy-paste code ini ke notepad dan simpan dengan nama file ffs_sub_sync_eng advanced.bat

@echo off
setlocal EnableDelayedExpansion

:: define suffix and language , for other languages, use 3-letter stream-representaion of language like eng for english,
:: kor for korean , jpn for japanese and so on...
set "srt_output_suffix=_synced"
set "lang=eng"


set "srt_output_suffix_eng=_%lang%%srt_output_suffix%"
set "srt_extention=.srt"
for /f "delims=" %%a  in ("%~1") do set "Extension_1=%%~xa"
for /f "delims=" %%a  in ("%~1") do set "file_1_name=%%~na"
for /f "delims=" %%a  in ("%~2") do set "Extension_2=%%~xa"
for /f "delims=" %%a  in ("%~2") do set "file_2_name=%%~na"


For %%A in ("%~1") do (
    Set file_1_p=%%~dpA
    Set file_1_p_full=%%~A
)

For %%A in ("%~2") do (
    Set file_2_p=%%~dpA
    Set file_2_p_full=%%~A
)


if %Extension_1%==%srt_extention% (
ffprobe -show_entries stream=index,codec_type:stream_tags=language -of compact=p=0:nk=1 "%file_2_p_full%"  -v 0 | grep %lang% | grep audio  > output_audio_index.txt
type output_audio_index.txt
set /p audio_index= < output_audio_index.txt
del output_audio_index.txt
call :capture
pause
)

if %Extension_2%==%srt_extention% (
ffprobe -show_entries stream=index,codec_type:stream_tags=language -of compact=p=0:nk=1 "%file_1_p_full%"  -v 0 | grep %lang% | grep audio  > output_audio_index.txt
type output_audio_index.txt
set /p audio_index= < output_audio_index.txt
del output_audio_index.txt
call :capture
pause
)


goto:no_srt_found

:capture
:: file no audio is found then perform the normal ffs command

if "%audio_index%"=="" (
echo "No %lang% steam is found..."
echo "Using default ffs command"
if %Extension_1%==%srt_extention% (
 ffs "%file_2_p_full%" -i "%file_1_p_full%" -o "%file_1_p%%file_1_name%%srt_output_suffix%.srt"
 echo Done
pause
)

if %Extension_2%==%srt_extention% (
ffs "%file_1_p_full%" -i "%file_2_p_full%" -o "%file_2_p%%file_2_name%%srt_output_suffix%.srt"
echo Done
pause
)
)


if not "%audio_index%"=="" (
set /a index_v=!audio_index:~0,1! -1
echo %lang% steam is found...
echo Using Stream #0:!audio_index:~0,1!


if %Extension_1%==%srt_extention% (
 ffs "%file_2_p_full%" -i "%file_1_p_full%" -o "%file_1_p%%file_1_name%%srt_output_suffix_eng%.srt"  --reference-stream a:!index_v!
 echo Done
pause
)

if %Extension_2%==%srt_extention% (
ffs "%file_1_p_full%" -i "%file_2_p_full%" -o "%file_2_p%%file_2_name%%srt_output_suffix_eng%.srt"  --reference-stream a:!index_v!
echo Done
pause
)

)



:no_srt_found
::print warning message if no srt file is detected
echo "no srt file detected"
pause

Demikian tutorial untuk menyinkronkan subtitle dengan sangat mudah dan cepat.

Special thanks to: _coco_, smacke for ffsubsync, root