feat: git init

This commit is contained in:
2026-01-17 19:18:58 -06:00
commit b73d5b8078
18 changed files with 1274 additions and 0 deletions

49
pkg/output/srt.go Normal file
View File

@@ -0,0 +1,49 @@
package output
import (
"fmt"
"strings"
"transcribe/internal/whisper"
)
// SRTFormatter formats transcription results as SRT subtitles
type SRTFormatter struct{}
// Format converts transcription result to SRT format
func (f *SRTFormatter) Format(result *whisper.TranscriptionResult) (string, error) {
var builder strings.Builder
for i, seg := range result.Segments {
// Subtitle number (1-indexed)
builder.WriteString(fmt.Sprintf("%d\n", i+1))
// Timestamps in SRT format: HH:MM:SS,mmm --> HH:MM:SS,mmm
startTime := formatSRTTimestamp(seg.Start)
endTime := formatSRTTimestamp(seg.End)
builder.WriteString(fmt.Sprintf("%s --> %s\n", startTime, endTime))
// Text with optional speaker label
text := strings.TrimSpace(seg.Text)
if seg.Speaker != "" {
text = fmt.Sprintf("[%s] %s", seg.Speaker, text)
}
builder.WriteString(text)
builder.WriteString("\n\n")
}
return strings.TrimSuffix(builder.String(), "\n"), nil
}
// formatSRTTimestamp converts seconds to SRT timestamp format (HH:MM:SS,mmm)
func formatSRTTimestamp(seconds float64) string {
totalMs := int64(seconds * 1000)
ms := totalMs % 1000
totalSeconds := totalMs / 1000
s := totalSeconds % 60
totalMinutes := totalSeconds / 60
m := totalMinutes % 60
h := totalMinutes / 60
return fmt.Sprintf("%02d:%02d:%02d,%03d", h, m, s, ms)
}