package main import ( "fmt" "io" "time" ) func secs_to_srt_time(secs float64) string { dur := time.Duration(secs) * time.Second hh := int64(dur.Hours()) mm := int64(dur.Minutes()) - (hh * 60) ss := int64(dur.Seconds()) - (hh * 3600) - (mm * 60) ms := int64(dur.Milliseconds()) - (hh * 3600000) - (mm * 60000) - (ss * 1000) return fmt.Sprintf("%02d:%02d:%02d,%03d", hh, mm, ss, ms) } func (ltc *loadTupContent) WriteSRT(w io.Writer, totalVideoDurationSecs float64) error { /* SRT file format (example from Wikipedia): 1 00:02:17,440 --> 00:02:20,375 Senator, we're making our final approach into Coruscant. 2 00:02:20,476 --> 00:02:22,501 Very good, Lieutenant. */ ctr := 1 for i := 0; i < len(ltc.Caps); i += 1 { if ltc.Caps[i] == "" { // Don't show anything continue } start := secs_to_srt_time(ltc.Secs[i]) var end string if i < len(ltc.Caps)-1 { end = secs_to_srt_time(ltc.Secs[i+1]) } else { // The final subtitle. Loadtup displays these for the entire // remaining video duration end = secs_to_srt_time(totalVideoDurationSecs) } fmt.Fprintf(w, "%d\n%s --> %s\n%s\n\n", ctr, start, end, ltc.Caps[i]) // We emitted a message, increase the counter ctr += 1 } return nil }