From 3b0b84b6f1af1f98404e76d96f9240bc3696280a Mon Sep 17 00:00:00 2001 From: Stu Leak Date: Wed, 17 Dec 2025 01:22:33 -0500 Subject: [PATCH] Preserve chapters, subtitles, and metadata in convert module Added explicit stream mapping to preserve all streams: - Map video, audio, and subtitle streams (subtitles optional) - Added -map_chapters to preserve chapter information - Added -map_metadata to preserve all file metadata - Copy subtitle streams without re-encoding Applies to both conversions with and without cover art. Works for all output formats that support these features. --- main.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 1f64cb4..7708dd1 100644 --- a/main.go +++ b/main.go @@ -3210,13 +3210,23 @@ func (s *appState) executeConvertJob(ctx context.Context, job *queue.Job, progre } } - // Map cover art + // Map streams and metadata if hasCoverArt { - args = append(args, "-map", "0:v", "-map", "0:a?", "-map", "1:v") + // With cover art: map video, audio, subtitles, and cover art + args = append(args, "-map", "0:v", "-map", "0:a?", "-map", "0:s?", "-map", "1:v") args = append(args, "-c:v:1", "png") args = append(args, "-disposition:v:1", "attached_pic") + } else { + // Without cover art: map video, audio, and subtitles + args = append(args, "-map", "0:v", "-map", "0:a?", "-map", "0:s?") } + // Preserve chapters and metadata + args = append(args, "-map_chapters", "0", "-map_metadata", "0") + + // Copy subtitle streams by default (don't re-encode) + args = append(args, "-c:s", "copy") + if strings.EqualFold(selectedFormat.Ext, ".mp4") || strings.EqualFold(selectedFormat.Ext, ".mov") { args = append(args, "-movflags", "+faststart") }