buildSelectExpression func moved from video to utils

This commit is contained in:
Krzysztofz01 2023-08-29 10:44:41 +02:00
parent 4fe8cad509
commit a1d63d0f9f
2 changed files with 41 additions and 42 deletions

View file

@ -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
}

View file

@ -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
}