Fix .mts duration parsing by extracting leading digits

This update addresses a parsing issue for .mts files by introducing a fallback to extract and parse only the leading digits when converting frame data to a float. A new helper function `getFirstDigits` is added to isolate and handle numeric values correctly.
This commit is contained in:
Leonid Nikitin 2025-05-10 00:55:16 +05:00
parent 17c570bf1d
commit da7d9c8035
Signed by: kor-elf
GPG Key ID: DAB5355A11C22541

View File

@ -11,6 +11,7 @@ import (
"regexp"
"strconv"
"strings"
"unicode"
)
type File struct {
@ -126,7 +127,13 @@ func (s Convertor) GetTotalDuration(file *File) (duration float64, err error) {
if len(frames) == 0 {
return s.getAlternativeTotalDuration(file)
}
return strconv.ParseFloat(frames, 64)
duration, err = strconv.ParseFloat(frames, 64)
if err != nil {
// fix .mts duration
return strconv.ParseFloat(getFirstDigits(frames), 64)
}
return duration, err
}
func (s Convertor) getAlternativeTotalDuration(file *File) (duration float64, err error) {
@ -241,3 +248,15 @@ func (s Convertor) GetSupportFormats() (encoder.ConvertorFormatsContract, error)
func (s Convertor) GetRunningProcesses() map[int]*exec.Cmd {
return s.runningProcesses.items
}
func getFirstDigits(s string) string {
result := ""
for _, r := range s {
if unicode.IsDigit(r) {
result += string(r)
} else {
break
}
}
return result
}