Made it possible for each encoder to add its own parameters.

Added preset option for libx264.
This commit is contained in:
2024-03-17 20:28:35 +05:00
parent 8347e9fbb2
commit 21d4afcedb
41 changed files with 559 additions and 254 deletions

View File

@@ -1,16 +1,38 @@
package libx264
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
import (
"errors"
encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
)
type encoder struct {
var Presets = []string{
"ultrafast",
"superfast",
"veryfast",
"faster",
"fast",
"medium",
"slow",
"slower",
"veryslow",
"placebo",
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{
"preset": newParameterPreset(),
}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
params := []string{"-c:v", "libx264"}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libx264"}
if parameters["preset"] != nil && parameters["preset"].IsEnabled() {
params = append(params, "-preset", parameters["preset"].Get())
}
return params
}
return encoder2.NewEncoder("libx264", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {
@@ -19,3 +41,16 @@ func NewData() encoder2.EncoderDataContract {
fileType := encoder2.FileType(encoder2.Video)
return encoder2.NewData(title, formats, fileType, NewEncoder)
}
func newParameterPreset() encoder2.ParameterContract {
setParameter := func(s string) (string, error) {
for _, value := range Presets {
if value == s {
return value, nil
}
}
return "", errors.New("preset not found")
}
return encoder2.NewParameter("preset", false, "medium", setParameter)
}