My scenario:
I have multiple mkv files with separate but corresponding srt files in a folder that I want to mux together.
I'm only interested in the files in the current directory and I'm running the script from an MS-DOS window on Win10 x64.
I want to write the resulting muxed files into a new sub-directory under the original directory.
Example:
video1.mkv
subtitle1.srt
video2.mkv
subtitle2.srt
video3.mkv
subtitle3.srt
I found a thread with a script on this forum that does pretty much what I want to do here: https://forum.videohelp.com/threads/365907-MKVMERGE-Batch-Muxing-multiple-audio-and-su...ks#post2407646
I've modified the script from the thread to this:
My problem is the line setting the mkv files name always results in the last (third in my example) file name.Code:for %%a in (.) do call :set_file_names :set_file_names set "output_name=" set "input_name=" set "subtitle_name=" for %%m in (*.mkv) do set "output_name=%%~dpmtemp\%%~nxm" & set "input_name=%%~nxm" for %%m in (*.srt) do set "subtitle_name=%%~nxm" & call :mux :mux echo ***** Starting MKVmerge ***** "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%output_name%" "%input_name%" "%subtitle_name%"
It correctly iterates through the subtitle file names producing:
video3.mkv + subtitle1.srt
video3.mkv + subtitle2.srt
video3.mkv + subtitle3.srt
I'm sure there's an easy fix, but being a batch file newbie, it's not obvious to me!
Can anyone help?
+ Reply to Thread
Results 1 to 9 of 9
-
-
Do a search for batch muxing mkv,there's a ton of threads here to help you.
I think,therefore i am a hamster. -
I've searched this forum (and others) for help with my question. I adapted my script from a post in this form.
Unfortunately, I'm still stuck!
Any help would be appreciated! -
set your names to :
video1.mkv
video1.srt
video2.mkv
video2.srt
video3.mkv
video3.srt
and run this script
Code:@echo off for %%a in (.srt) do call :set_file_names "%%a" :set_file_name if %1 EQU ".srt" (for %%m in (*.srt) do set "video_name=%%~nm" & call :mux %%m) :mux echo ***** Starting MKVmerge ***** if %1 NEQ ".srt" ("C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%video_name%_merged.mkv" "%video_name%.mkv" "%video_name%.srt")
-
Thanks for your answer!
The program I use to find and add subtitles names the files:- video1.mkv
- video1_OS_English.srt
- video2.mkv
- video2_OS_English_CC.srt
Any suggestions? -
Disclaimer: Just a quick attempt, not extensively tested.
Code:@echo off set /a "outernum=0" for %%m in (*.mkv) do set "output_name=%%~dpmtemp\%%~nxm" & set "input_name=%%~nxm" & call :inner exit /b :inner set /a "innernum=0" for %%m in (*.srt) do set "subtitle_name=%%~nxm" & call :mux set /a "outernum+=1" exit /b :mux if %outernum% equ %innernum% ( echo ***** Starting MKVmerge ***** "C:\Program Files\MKVToolNix\mkvmerge.exe" -o "%output_name%" "%input_name%" "%subtitle_name%" ) set /a "innernum+=1"
Last edited by Luke M; 12th Sep 2022 at 23:40.
-
Problem solved! That worked great @luke m!
Thanks so much for your help! -
Code:
@echo off setlocal enabledelayedexpansion cd /d "%~dp0" && 2>nul mkdir "%~dp0temp" set "_mkv="C:\Program Files\MKVToolNix\mkvmerge.exe"" set "_arg_0=--verbose --priority higher --default-track-flag 0:yes --track-name 0:_SRT_" set "_arg_1=--language 0:eng _File_SRT --flush-on-close --disable-track-statistics-tags" for %%i in =;(*.mkv);= do for %%I in =;("%%~ni*.srt");= do echo\"%%~nxI" | 2>nul findstr /i _CC\.srt 1>nul && =;( !_mkv! -o ".\temp\%%~nxi" ".\%%~nxi" !_arg_0:_SRT_=ClosedCaption! !_arg_1:_File_SRT=".\%%~nxI"! | findstr ': );= || !_mkv! -o ".\temp\%%~nxi" ".\%%~nxi" !_arg_0:_SRT_=English! !_arg_1:_File_SRT=".\%%~nxI"! | findstr ': endlocal && goto :eof
Code:video1.mkv video1_OS_English_CC.srt video2.mkv video2_OS_English.srt
Code:"C:\Program Files\MKVToolNix\mkvmerge.exe" -o ".\temp\video1.mkv" ".\video1.mkv" --verbose --priority higher --default-track-flag 0:yes --track-name 0:ClosedCaption --language 0:eng ".\video1_OS_English_CC.srt" --flush-on-close --disable-track-statistics-tags "C:\Program Files\MKVToolNix\mkvmerge.exe" -o ".\temp\video2.mkv" ".\video2.mkv" --verbose --priority higher --default-track-flag 0:yes --track-name 0:English --language 0:eng ".\video2_OS_English.srt" --flush-on-close --disable-track-statistics-tags
Code:'.\video1.mkv': Using the demultiplexer for the format 'Matroska'. '.\video1_OS_English_CC.srt': Using the demultiplexer for the format 'SRT subtitles'. '.\video2.mkv': Using the demultiplexer for the format 'Matroska'. '.\video2_OS_English.srt': Using the demultiplexer for the format 'SRT subtitles'.
Last edited by Io-oI; 14th Sep 2022 at 14:16. Reason: HTML edit fix
Similar Threads
-
MKVMERGE Batch Muxing multiple audio and subtitle tracks?
By jahob000 in forum Newbie / General discussionsReplies: 38Last Post: 30th May 2023, 19:13 -
Spreadsheet to aid batch muxing video and subtitles file in mkvmerge
By aspenx in forum Video ConversionReplies: 4Last Post: 16th Mar 2020, 12:16 -
MKVMerge batch muxing only attachments from other file
By kuodo20 in forum Newbie / General discussionsReplies: 2Last Post: 8th Jan 2018, 01:17 -
MKVmerge/MKVextract batch extract/muxing subtitles
By BuSHari in forum Newbie / General discussionsReplies: 2Last Post: 20th Oct 2017, 10:29 -
MKVmerge batch remuxing and removing subtitles?
By TE16 in forum Newbie / General discussionsReplies: 2Last Post: 23rd Sep 2017, 06:55