@@ -273,43 +273,49 @@ func ExtractSubtitlesFromMKV(mkvPath string) (string, error) {
273273 return "" , errors .NewValidationError ("no subtitle tracks found in MKV" , nil )
274274 }
275275
276- logger .Info ("Available subtitle tracks:" )
277- for i , tr := range tracks {
278- lines := len (tr .Entries )
279- name := strings .TrimSpace (tr .Name )
280- lang := tr .Language
281- bcp := languages .BCP47FromMKV (lang )
282- if bcp != "" {
283- if name != "" {
284- lang = fmt .Sprintf ("%s (%s)" , bcp , name )
285- } else {
286- lang = fmt .Sprintf ("%s" , bcp )
276+ var selectedIdx int
277+ if len (tracks ) == 1 {
278+ // Only one subtitle track is available; select it automatically
279+ logger .Info ("Only one subtitle track found; selecting it automatically." )
280+ selectedIdx = 0
281+ } else {
282+ logger .Info ("Available subtitle tracks:" )
283+ for i , tr := range tracks {
284+ lines := len (tr .Entries )
285+ name := strings .TrimSpace (tr .Name )
286+ lang := tr .Language
287+ bcp := languages .BCP47FromMKV (lang )
288+ if bcp != "" {
289+ if name != "" {
290+ lang = fmt .Sprintf ("%s (%s)" , bcp , name )
291+ } else {
292+ lang = fmt .Sprintf ("%s" , bcp )
293+ }
287294 }
295+ logger .Info (fmt .Sprintf ("[%d] Language: %s, Lines:%d" , i + 1 , lang , lines ))
288296 }
289- logger .Info (fmt .Sprintf ("[%d] Language: %s, Lines:%d" , i + 1 , lang , lines ))
290- }
291297
292- var selectedIdx int
293- for {
294- input := logger . InputPrompt ( "Select track number to extract: " )
295- input = strings . TrimSpace ( input )
296- if input == "" {
297- best , errSel := parser . SelectBestEnglishTrack ()
298- if errSel == nil && best != nil {
299- for i := range tracks {
300- if tracks [ i ]. Number == best . Number {
301- selectedIdx = i
302- break
298+ for {
299+ input := logger . InputPrompt ( "Select track number to extract: " )
300+ input = strings . TrimSpace ( input )
301+ if input == "" {
302+ best , errSel := parser . SelectBestEnglishTrack ()
303+ if errSel == nil && best != nil {
304+ for i := range tracks {
305+ if tracks [ i ]. Number == best . Number {
306+ selectedIdx = i
307+ break
308+ }
303309 }
310+ break
304311 }
312+ }
313+ if n , errAtoi := strconv .Atoi (input ); errAtoi == nil && n >= 1 && n <= len (tracks ) {
314+ selectedIdx = n - 1
305315 break
306316 }
317+ logger .Warning ("Invalid selection. Enter a valid number." )
307318 }
308- if n , errAtoi := strconv .Atoi (input ); errAtoi == nil && n >= 1 && n <= len (tracks ) {
309- selectedIdx = n - 1
310- break
311- }
312- logger .Warning ("Invalid selection. Enter a valid number." )
313319 }
314320
315321 selected := tracks [selectedIdx ]
0 commit comments