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

@@ -2,15 +2,13 @@ package apng
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "apng"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "apng"}
return encoder2.NewEncoder("apng", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package bmp
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "bmp"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "bmp"}
return encoder2.NewEncoder("bmp", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -1,7 +1,20 @@
package encoder
import "errors"
type EncoderContract interface {
GetName() string
GetParams() []string
GetParameter(name string) (ParameterContract, error)
}
type ParameterContract interface {
GetName() string
Set(string) error
Get() string
IsEnabled() bool
SetEnable()
SetDisable()
}
type EncoderDataContract interface {
@@ -77,3 +90,80 @@ func GetListFileType() []FileTypeContract {
FileType(Image),
}
}
type Encoder struct {
name string
parameters map[string]ParameterContract
getParams func(parameters map[string]ParameterContract) []string
}
func NewEncoder(name string, parameters map[string]ParameterContract, getParams func(parameters map[string]ParameterContract) []string) *Encoder {
return &Encoder{
name: name,
parameters: parameters,
getParams: getParams,
}
}
func (e *Encoder) GetName() string {
return e.name
}
func (e *Encoder) GetParams() []string {
return e.getParams(e.parameters)
}
func (e *Encoder) GetParameter(name string) (ParameterContract, error) {
if e.parameters[name] == nil {
return nil, errors.New("parameter not found")
}
return e.parameters[name], nil
}
type Parameter struct {
name string
isEnabled bool
parameter string
setParameter func(string) (string, error)
}
func NewParameter(name string, isEnabled bool, defaultParameter string, setParameter func(string) (string, error)) *Parameter {
return &Parameter{
name: name,
isEnabled: isEnabled,
parameter: defaultParameter,
setParameter: setParameter,
}
}
func (p *Parameter) GetName() string {
return p.name
}
func (p *Parameter) Set(s string) (err error) {
if p.setParameter != nil {
s, err = p.setParameter(s)
if err != nil {
return err
}
}
p.parameter = s
return nil
}
func (p *Parameter) Get() string {
return p.parameter
}
func (p *Parameter) IsEnabled() bool {
return p.isEnabled
}
func (p *Parameter) SetEnable() {
p.isEnabled = true
}
func (p *Parameter) SetDisable() {
p.isEnabled = false
}

View File

@@ -2,15 +2,13 @@ package flv
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "flv"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "flv"}
return encoder2.NewEncoder("flv", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package gif
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "gif"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "gif"}
return encoder2.NewEncoder("gif", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -4,15 +4,13 @@ import (
encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
)
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "h264_nvenc"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "h264_nvenc"}
return encoder2.NewEncoder("h264_nvenc", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libmp3lame
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "libmp3lame"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "libmp3lame"}
return encoder2.NewEncoder("libmp3lame", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libshine
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "libshine"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "libshine"}
return encoder2.NewEncoder("libshine", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libtwolame
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "libtwolame"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "libtwolame"}
return encoder2.NewEncoder("libtwolame", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libvpx
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "libvpx"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libvpx"}
return encoder2.NewEncoder("libvpx", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libvpx_vp9
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "libvpx-vp9"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libvpx-vp9"}
return encoder2.NewEncoder("libvpx_vp9", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libwebp
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "libwebp"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libwebp"}
return encoder2.NewEncoder("libwebp", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libwebp_anim
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "libwebp_anim"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libwebp_anim"}
return encoder2.NewEncoder("libwebp_anim", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

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

View File

@@ -2,15 +2,13 @@ package libx265
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "libx265"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libx265"}
return encoder2.NewEncoder("libx265", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package libxvid
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "libxvid"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "libxvid"}
return encoder2.NewEncoder("libxvid", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package mjpeg
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "mjpeg"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "mjpeg"}
return encoder2.NewEncoder("mjpeg", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package mp2
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "mp2"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "mp2"}
return encoder2.NewEncoder("mp2", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package mp2fixed
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "mp2fixed"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "mp2fixed"}
return encoder2.NewEncoder("mp2fixed", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package mpeg1video
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "mpeg1video"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "mpeg1video"}
return encoder2.NewEncoder("mpeg1video", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package mpeg2video
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "mpeg2video"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "mpeg2video"}
return encoder2.NewEncoder("mpeg2video", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package mpeg4
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "mpeg4"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "mpeg4"}
return encoder2.NewEncoder("mpeg4", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package msmpeg4
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "msmpeg4"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "msmpeg4"}
return encoder2.NewEncoder("msmpeg4", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package msmpeg4v2
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "msmpeg4v2"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "msmpeg4v2"}
return encoder2.NewEncoder("msmpeg4v2", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package msvideo1
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "msvideo1"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "msvideo1"}
return encoder2.NewEncoder("msvideo1", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package png
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "png"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "png"}
return encoder2.NewEncoder("png", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package qtrle
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "qtrle"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "qtrle"}
return encoder2.NewEncoder("qtrle", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package sgi
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "sgi"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "sgi"}
return encoder2.NewEncoder("sgi", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package tiff
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "tiff"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "tiff"}
return encoder2.NewEncoder("tiff", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package wmav1
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "wmav1"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "wmav1"}
return encoder2.NewEncoder("wmav1", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package wmav2
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:a", "wmav2"}
}
func (e encoder) GetParams() []string {
return []string{"-c:a", "wmav2"}
return encoder2.NewEncoder("wmav2", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package wmv1
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "wmv1"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "wmv1"}
return encoder2.NewEncoder("wmv1", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package wmv2
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "wmv2"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "wmv2"}
return encoder2.NewEncoder("wmv2", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {

View File

@@ -2,15 +2,13 @@ package xbm
import encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
type encoder struct {
}
func NewEncoder() encoder2.EncoderContract {
return &encoder{}
}
parameters := map[string]encoder2.ParameterContract{}
getParams := func(parameters map[string]encoder2.ParameterContract) []string {
return []string{"-c:v", "xbm"}
}
func (e encoder) GetParams() []string {
return []string{"-c:v", "xbm"}
return encoder2.NewEncoder("xbm", parameters, getParams)
}
func NewData() encoder2.EncoderDataContract {