Skip to content

Instantly share code, notes, and snippets.

@andrizan
Last active August 15, 2025 11:08
Show Gist options
  • Select an option

  • Save andrizan/ee3a328e363b8961a5d26d43f28224a1 to your computer and use it in GitHub Desktop.

Select an option

Save andrizan/ee3a328e363b8961a5d26d43f28224a1 to your computer and use it in GitHub Desktop.
mkvextract.exe required
@echo off
setlocal enabledelayedexpansion
:: Cek apakah parameter folder diberikan
if "%~1"=="" (
echo Usage: extract-sub-indo.bat "folder_path"
echo Contoh: extract-sub-indo.bat "C:\Movies"
pause
exit /b 1
)
:: Set folder input
set "INPUT_FOLDER=%~1"
:: Cek apakah folder exists
if not exist "%INPUT_FOLDER%" (
echo Error: Folder "%INPUT_FOLDER%" tidak ditemukan!
pause
exit /b 1
)
:: Cek apakah mkvextract.exe ada
where mkvextract.exe >nul 2>&1
if errorlevel 1 (
if not exist "mkvextract.exe" (
echo Error: mkvextract.exe tidak ditemukan!
echo Pastikan mkvextract.exe ada di PATH atau di folder yang sama dengan skrip ini.
pause
exit /b 1
)
)
echo.
echo ========================================
echo BATCH SUBTITLE EXTRACTOR (INDONESIA)
echo ========================================
echo.
echo Memproses folder: %INPUT_FOLDER%
echo.
:: Buat folder output
set "OUTPUT_FOLDER=%INPUT_FOLDER%\subs"
if not exist "!OUTPUT_FOLDER!" mkdir "!OUTPUT_FOLDER!"
:: Counter untuk statistik
set /a TOTAL_FILES=0
set /a PROCESSED_FILES=0
set /a TOTAL_SUBS=0
:: Loop melalui semua file MKV
for %%f in ("%INPUT_FOLDER%\*.mkv") do (
set /a TOTAL_FILES+=1
set "CURRENT_FILE=%%f"
set "FILENAME=%%~nf"
echo Memproses: %%~nxf
:: Buat nama file yang aman
set "SAFE_NAME=!FILENAME!"
set "SAFE_NAME=!SAFE_NAME:[=_!"
set "SAFE_NAME=!SAFE_NAME:]=_!"
set "SAFE_NAME=!SAFE_NAME:(=_!"
set "SAFE_NAME=!SAFE_NAME:)=_!"
set "SAFE_NAME=!SAFE_NAME: =_!"
set "SAFE_NAME=!SAFE_NAME:-=_!"
set "SAFE_NAME=!SAFE_NAME:'=_!"
set "SAFE_NAME=!SAFE_NAME:&=_!"
set "SAFE_NAME=!SAFE_NAME:%%=_!"
:: Generate unique filename untuk temporary file
for /f "tokens=1-4 delims=:.," %%a in ("%time%") do (
set "TIMESTAMP=%%a%%b%%c%%d"
)
set "TRACK_FILE=tracks_!TIMESTAMP!_!TOTAL_FILES!.txt"
:: Gunakan mkvmerge untuk identifikasi tracks
echo - Menganalisis tracks...
mkvmerge.exe --identify "!CURRENT_FILE!" > "!TRACK_FILE!" 2>&1
:: Cari subtitle tracks
set "FOUND_INDO_TRACK="
set "TRACK_COUNT=0"
:: Parse tracks dengan format: "Track ID X: subtitles (FORMAT) [language:xxx]"
for /f "tokens=*" %%i in ('findstr /c:"subtitles" "!TRACK_FILE!"') do (
set "LINE=%%i"
set /a TRACK_COUNT+=1
echo - Track ditemukan: !LINE!
:: Extract track ID dari format "Track ID X:"
for /f "tokens=3 delims= " %%j in ("!LINE!") do (
set "TRACK_ID=%%j"
:: Hapus karakter : jika ada
set "TRACK_ID=!TRACK_ID::=!"
:: Cek apakah ini track Indonesia berdasarkan bahasa atau title
echo !LINE! | findstr /i /c:"indonesian" /c:"language:id" /c:"language:ind" >nul
if not errorlevel 1 (
if "!FOUND_INDO_TRACK!"=="" (
set "FOUND_INDO_TRACK=!TRACK_ID!"
echo * Track Indonesia ditemukan: ID !TRACK_ID!
)
) else (
:: Jika belum ada track Indonesia yang teridentifikasi, gunakan yang pertama
if "!FOUND_INDO_TRACK!"=="" (
set "FOUND_INDO_TRACK=!TRACK_ID!"
echo * Menggunakan track subtitle: ID !TRACK_ID!
)
)
)
)
:: Ekstrak subtitle jika ditemukan
if not "!FOUND_INDO_TRACK!"=="" (
set /a PROCESSED_FILES+=1
echo - Mengekstrak track !FOUND_INDO_TRACK!...
:: Tentukan format output berdasarkan track info
set "OUTPUT_ASS=!OUTPUT_FOLDER!\!SAFE_NAME!.ass"
set "OUTPUT_SRT=!OUTPUT_FOLDER!\!SAFE_NAME!.srt"
:: Cek format subtitle dari track info
findstr /c:"Track ID !FOUND_INDO_TRACK!:" "!TRACK_FILE!" | findstr /i /c:"SubStationAlpha" /c:"ASS" >nul
if not errorlevel 1 (
set "OUTPUT_FILE=!OUTPUT_ASS!"
set "FORMAT=ASS"
) else (
set "OUTPUT_FILE=!OUTPUT_SRT!"
set "FORMAT=SRT"
)
echo - Format: !FORMAT! - Output: !OUTPUT_FILE!
echo - Command: mkvextract.exe tracks "!CURRENT_FILE!" !FOUND_INDO_TRACK!:"!OUTPUT_FILE!"
:: Ekstrak subtitle dengan output error
mkvextract.exe tracks "!CURRENT_FILE!" !FOUND_INDO_TRACK!:"!OUTPUT_FILE!" >nul 2>&1
:: Cek hasil ekstraksi
if exist "!OUTPUT_FILE!" (
:: Cek ukuran file (harus > 0 bytes)
for %%x in ("!OUTPUT_FILE!") do (
if %%~zx gtr 0 (
set /a TOTAL_SUBS+=1
echo ✓ Berhasil diekstrak: %%~nxx ^(%%~zx bytes^)
) else (
del "!OUTPUT_FILE!" >nul 2>&1
echo ✗ File kosong - ekstraksi gagal
:: Coba format alternatif
if "!FORMAT!"=="ASS" (
echo - Mencoba format SRT...
mkvextract.exe tracks "!CURRENT_FILE!" !FOUND_INDO_TRACK!:"!OUTPUT_SRT!" >nul 2>&1
if exist "!OUTPUT_SRT!" (
for %%y in ("!OUTPUT_SRT!") do (
if %%~zy gtr 0 (
set /a TOTAL_SUBS+=1
echo ✓ Berhasil diekstrak: %%~nyy ^(%%~zy bytes^)
) else (
del "!OUTPUT_SRT!" >nul 2>&1
echo ✗ Gagal mengekstrak dalam format apapun
)
)
) else (
echo ✗ Gagal membuat file SRT
)
) else (
echo - Mencoba format ASS...
mkvextract.exe tracks "!CURRENT_FILE!" !FOUND_INDO_TRACK!:"!OUTPUT_ASS!" >nul 2>&1
if exist "!OUTPUT_ASS!" (
for %%y in ("!OUTPUT_ASS!") do (
if %%~zy gtr 0 (
set /a TOTAL_SUBS+=1
echo ✓ Berhasil diekstrak: %%~nyy ^(%%~zy bytes^)
) else (
del "!OUTPUT_ASS!" >nul 2>&1
echo ✗ Gagal mengekstrak dalam format apapun
)
)
) else (
echo ✗ Gagal membuat file ASS
)
)
)
)
) else (
echo ✗ File tidak terbuat - periksa path dan permission
)
) else (
echo - Tidak ada track subtitle yang ditemukan
)
:: Hapus file temporary
if exist "!TRACK_FILE!" del "!TRACK_FILE!" >nul 2>&1
echo.
)
:: Tampilkan statistik
echo ========================================
echo STATISTIK AKHIR
echo ========================================
echo Total file MKV ditemukan: !TOTAL_FILES!
echo File dengan subtitle: !PROCESSED_FILES!
echo Total subtitle diekstrak: !TOTAL_SUBS!
echo.
if !TOTAL_SUBS! gtr 0 (
echo ✓ Hasil disimpan di: !OUTPUT_FOLDER!
echo.
echo Membuka folder hasil...
start "" "!OUTPUT_FOLDER!"
) else (
echo ✗ Tidak ada subtitle yang berhasil diekstrak.
echo.
echo Tips troubleshooting:
echo 1. Jalankan: mkvmerge --identify "namafile.mkv" di command prompt
echo 2. Pastikan ada track subtitle dalam file MKV
echo 3. Coba manual: mkvextract tracks "file.mkv" 2:"test.ass"
echo 4. Periksa permission folder output
)
echo ========================================
pause
@echo off
chcp 65001 >nul
title Download Subtitle Web
setlocal enabledelayedexpansion
REM === Konfigurasi dasar ===
set SUB_LANG=id
set OUTPUT_DIR=%CD%\Subs
REM === Ambil URL dari parameter atau input manual ===
if "%~1"=="" (
echo Masukkan URL Bilibili:
set /p URL_PLAYLIST=
if "!URL_PLAYLIST!"=="" (
echo ERROR: URL tidak boleh kosong!
pause
exit /b 1
)
) else (
set URL_PLAYLIST=%~1
)
REM === Buat direktori output jika belum ada ===
if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%"
echo =========================================
echo BILIBILI SUBTITLE DOWNLOADER
echo =========================================
echo URL: %URL_PLAYLIST%
echo Bahasa subtitle: %SUB_LANG% (Indonesia)
echo Direktori output: %OUTPUT_DIR%
echo =========================================
echo.
REM === Cek apakah yt-dlp tersedia ===
where yt-dlp >nul 2>&1
if %errorlevel% neq 0 (
echo ERROR: yt-dlp tidak ditemukan!
echo Silakan install yt-dlp terlebih dahulu.
pause
exit /b 1
)
echo Memulai download subtitle...
echo.
REM === Jalankan yt-dlp ===
yt-dlp ^
--yes-playlist ^
--skip-download ^
--write-subs ^
--write-auto-subs ^
--sub-lang %SUB_LANG% ^
--sub-format srt/ass ^
-o "%OUTPUT_DIR%\%%(uploader)s - %%(title)s [%%(id)s].%%(ext)s" ^
--no-warnings ^
--progress ^
%URL_PLAYLIST%
REM === Cek hasil ===
if %errorlevel% equ 0 (
echo.
echo =========================================
echo DOWNLOAD SELESAI!
echo =========================================
echo Subtitle berhasil diunduh ke: %OUTPUT_DIR%
echo.
dir "%OUTPUT_DIR%" /b
) else (
echo.
echo =========================================
echo DOWNLOAD GAGAL!
echo =========================================
echo Terjadi error saat download.
echo Periksa URL dan koneksi internet Anda.
)
echo.
echo Tekan tombol apa saja untuk keluar...
pause >nul
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment