diff --git a/utils.go b/utils.go index c8423f2..90def84 100644 --- a/utils.go +++ b/utils.go @@ -214,3 +214,44 @@ func getDevicesWindows() ([]string, error) { devices := parseDevices(builder.String()) return devices, nil } + +// Error representing a strings.Builder failure in the buildSelectExpression func. +var errExpressionBuilder = fmt.Errorf("vidio: failed to write tokens to the frame select expresion") + +// Helper function used to generate a "-vf select" expression that specifies which video frames should be exported. +func buildSelectExpression(n ...int) (string, error) { + sb := strings.Builder{} + if _, err := sb.WriteString("select='"); err != nil { + return "", errExpressionBuilder + } + + for index, frame := range n { + if index != 0 { + if _, err := sb.WriteRune('+'); err != nil { + return "", errExpressionBuilder + } + } + + if _, err := sb.WriteString("eq(n\\,"); err != nil { + + return "", errExpressionBuilder + } + + if _, err := sb.WriteString(strconv.Itoa(frame)); err != nil { + + return "", errExpressionBuilder + } + + if _, err := sb.WriteRune(')'); err != nil { + + return "", errExpressionBuilder + } + } + + if _, err := sb.WriteRune('\''); err != nil { + + return "", errExpressionBuilder + } + + return sb.String(), nil +} diff --git a/video.go b/video.go index 504013b..c377d7c 100644 --- a/video.go +++ b/video.go @@ -6,7 +6,6 @@ import ( "os" "os/exec" "os/signal" - "strconv" "strings" "syscall" ) @@ -405,44 +404,3 @@ func (video *Video) cleanup() { os.Exit(1) }() } - -// Error representing a strings.Builder failure in the buildSelectExpression func. -var errExpressionBuilder = fmt.Errorf("vidio: failed to write tokens to the frame select expresion") - -// Helper function used to generate a "-vf select" expression that specifies which video frames should be exported. -func buildSelectExpression(n ...int) (string, error) { - sb := strings.Builder{} - if _, err := sb.WriteString("select='"); err != nil { - return "", errExpressionBuilder - } - - for index, frame := range n { - if index != 0 { - if _, err := sb.WriteRune('+'); err != nil { - return "", errExpressionBuilder - } - } - - if _, err := sb.WriteString("eq(n\\,"); err != nil { - - return "", errExpressionBuilder - } - - if _, err := sb.WriteString(strconv.Itoa(frame)); err != nil { - - return "", errExpressionBuilder - } - - if _, err := sb.WriteRune(')'); err != nil { - - return "", errExpressionBuilder - } - } - - if _, err := sb.WriteRune('\''); err != nil { - - return "", errExpressionBuilder - } - - return sb.String(), nil -}