Initial push to gitea
This commit is contained in:
49
internal/transcribe/segments.go
Normal file
49
internal/transcribe/segments.go
Normal file
@@ -0,0 +1,49 @@
|
||||
package transcribe
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Segment is one timestamped chunk of a transcript.
|
||||
type Segment struct {
|
||||
Start float64 // seconds from start of audio
|
||||
End float64
|
||||
Text string
|
||||
}
|
||||
|
||||
// PlainText joins all segments into a single transcript.
|
||||
func PlainText(segs []Segment) string {
|
||||
var b strings.Builder
|
||||
for _, s := range segs {
|
||||
b.WriteString(strings.TrimSpace(s.Text))
|
||||
b.WriteByte(' ')
|
||||
}
|
||||
return strings.TrimSpace(b.String())
|
||||
}
|
||||
|
||||
// FormatForLLM renders segments as one timestamped line each, suitable for
|
||||
// feeding to a model that needs to pick a time window.
|
||||
//
|
||||
// [mm:ss] [mm:ss] text
|
||||
func FormatForLLM(segs []Segment) string {
|
||||
var b strings.Builder
|
||||
for _, s := range segs {
|
||||
fmt.Fprintf(&b, "[%s] [%s] %s\n", formatTS(s.Start), formatTS(s.End), strings.TrimSpace(s.Text))
|
||||
}
|
||||
return b.String()
|
||||
}
|
||||
|
||||
func formatTS(seconds float64) string {
|
||||
if seconds < 0 {
|
||||
seconds = 0
|
||||
}
|
||||
total := int(seconds)
|
||||
h := total / 3600
|
||||
m := (total % 3600) / 60
|
||||
s := total % 60
|
||||
if h > 0 {
|
||||
return fmt.Sprintf("%02d:%02d:%02d", h, m, s)
|
||||
}
|
||||
return fmt.Sprintf("%02d:%02d", m, s)
|
||||
}
|
||||
Reference in New Issue
Block a user