Match and mux in dropped external subtitles
Drag in subtitle files alongside .mkv files and they're matched to the right video by episode code (S04E06, zero-padding and separator insensitive, plus 4x06 as a fallback) and muxed in as extra subtitle tracks. Any subtitle format mkvmerge accepts is recognized: SRT, (S)SA, VobSub, WebVTT, PGS/SUP, USF, SAMI, TTML/DFXP, STL, Kate. Matching works regardless of drop order — subtitles dropped before their video are held pending until a matching video shows up, and vice versa. Language, forced, and SDH flags are guessed from common filename tokens (e.g. "eng", "forced", "sdh") to set the muxed track's language/name/flags; unmatched subtitles are reported in the status bar.
This commit is contained in:
@@ -174,7 +174,7 @@ public partial class ProgressWindow : FluentWindow
|
||||
.Where(t => t.Type == "subtitles" && t.Copy)
|
||||
.Select(t => t.Id).ToList();
|
||||
|
||||
bool nothingToStrip = file.Tracks.All(t => t.Copy);
|
||||
bool nothingToStrip = file.Tracks.All(t => t.Copy) && file.ExternalSubtitles.Count == 0;
|
||||
|
||||
var progress = new Progress<ProcessingProgress>(p =>
|
||||
{
|
||||
@@ -187,10 +187,14 @@ public partial class ProgressWindow : FluentWindow
|
||||
: await service.StripTracksAsync(
|
||||
file.FilePath, outputFilePath,
|
||||
videoIds, audioIds, subIds,
|
||||
file.ExternalSubtitles.ToList(),
|
||||
progress, ct);
|
||||
|
||||
string tag = result.Success ? "[DONE]" : "[FAIL]";
|
||||
AppendLog($"{tag} {Path.GetFileName(result.OutputFilePath)} — {result.Message}");
|
||||
string extInfo = file.ExternalSubtitles.Count > 0
|
||||
? $" (+{file.ExternalSubtitles.Count} external sub{(file.ExternalSubtitles.Count == 1 ? "" : "s")})"
|
||||
: string.Empty;
|
||||
AppendLog($"{tag} {Path.GetFileName(result.OutputFilePath)}{extInfo} — {result.Message}");
|
||||
|
||||
HistoryService.Add(new HistoryEntry
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user