Last active
August 15, 2025 11:08
-
-
Save andrizan/ee3a328e363b8961a5d26d43f28224a1 to your computer and use it in GitHub Desktop.
mkvextract.exe required
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| @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