VideoHelp Forum
+ Reply to Thread
Results 1 to 9 of 9
Thread
  1. Member
    Join Date
    Jul 2011
    Location
    Denver, CO
    Search PM
    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:
    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%"
    My problem is the line setting the mkv files name always results in the last (third in my example) file 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?
    Quote Quote  
  2. I'm a Super Moderator johns0's Avatar
    Join Date
    Jun 2002
    Location
    canada
    Search Comp PM
    Do a search for batch muxing mkv,there's a ton of threads here to help you.
    I think,therefore i am a hamster.
    Quote Quote  
  3. Member
    Join Date
    Jul 2011
    Location
    Denver, CO
    Search PM
    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!
    Quote Quote  
  4. 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")
    Quote Quote  
  5. Member
    Join Date
    Jul 2011
    Location
    Denver, CO
    Search PM
    Thanks for your answer!

    The program I use to find and add subtitles names the files:
    • video1.mkv
    • video1_OS_English.srt
    OR
    • video2.mkv
    • video2_OS_English_CC.srt
    So, my subtitle names vary and I would like to avoid renaming them as an additional step.

    Any suggestions?
    Quote Quote  
  6. 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.
    Quote Quote  
  7. Member
    Join Date
    Jul 2011
    Location
    Denver, CO
    Search PM
    Problem solved! That worked great @luke m!

    Thanks so much for your help!
    Quote Quote  
  8. Member
    Join Date
    Sep 2022
    Location
    Rio de Janeiro
    Search Comp PM
    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
    Files
    Code:
    video1.mkv
    video1_OS_English_CC.srt
    video2.mkv
    video2_OS_English.srt
    Command lines
    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
    Outputs
    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
    Quote Quote  
  9. Member
    Join Date
    Jul 2011
    Location
    Denver, CO
    Search PM
    Thanks Io-oI!
    Quote Quote  



Similar Threads

Visit our sponsor! Try DVDFab and backup Blu-rays!