[Script] Merge video and external subtitles

Running FileBot from the console, Groovy scripting, shell scripts, etc
Post Reply
User avatar
rednoah
The Source
Posts: 23908
Joined: 16 Nov 2011, 08:59
Location: Taipei
Contact:

[Script] Merge video and external subtitles

Post by rednoah »

This post-processing script will call mkvmerge to mux the MKV video file and external SRT subtitles at hand into a single MKV file.

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]
:idea: Please read the FAQ and How to Request Help.
Post Reply