Groovy: Select all
{ source, target ->
// use 'mkvmerge' to remux mkv files with external subtitles
if (target.extension == 'mkv') {
def subtitles = target.dir.listFiles{ s -> s.extension == 'srt' && s.isDerived(target) }
if (subtitles) {
def tmp = target + '.tmp'
def cmd = ['mkvmerge', target, '-o', tmp]
subtitles.eachWithIndex{ s, i ->
cmd += ['--language', i + ':' + s.name.match(/[.](\w{3})[.]srt$/), s]
}
// execute mkvmerge command
system(*cmd)
// delete original mkv file and external subtitle files
trash(target)
trash(subtitles)
// replace original mkv file with remux
println "RENAME [$tmp] to [$target]"
tmp.renameTo(target)
}
}
}
e.g.
Console Output: Select all
$ filebot -rename *.mkv *.srt --db TheMovieDB --format "{plex.name}" --apply "/path/to/mkvmerge.groovy"
...
[MOVE] from [Avatar.2009.mkv] to [Avatar (2009).mkv]
[MOVE] from [Avatar.2009.eng.srt] to [Avatar (2009).eng.srt]
...
[SCRIPT] Run Script (mkvmerge.groovy)
[SCRIPT] EXECUTE mkvmerge [Avatar (2009).mkv, -o, Avatar (2009).mkv.tmp, --language, 0:eng, Avatar (2009).eng.srt] (mkvmerge.groovy)
mkvmerge v86.0 ('Winter') 64-bit
'Avatar (2009).mkv': Using the demultiplexer for the format 'Matroska'.
'Avatar (2009).eng.srt': Using the demultiplexer for the format 'SRT subtitles'.
'Avatar (2009).mkv' track 0: Using the output module for the format 'AVC/H.264'.
'Avatar (2009).eng.srt' track 0: Using the output module for the format 'text subtitles'.
The file 'Avatar (2009).mkv.tmp' has been opened for writing.
The cue entries (the index) are being written...
Multiplexing took 1 second.
[SCRIPT] TRASH Avatar (2009).mkv (mkvmerge.groovy)
[SCRIPT] TRASH Avatar (2009).eng.srt (mkvmerge.groovy)
[SCRIPT] RENAME [Avatar (2009).mkv.tmp] to [Avatar (2009).mkv] (mkvmerge.groovy)
...
$ filebot -mediainfo *.mkv --format "{f} {text.language}"
Avatar (2009).mkv [en]