Compare commits
	
		
			3 Commits
		
	
	
		
			f17104595d
			...
			40848a70a5
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 40848a70a5 | |||
| 
						
						
							
						
						9aaee4c183
	
				 | 
					
					
						|||
| 
						
						
							
						
						2017617614
	
				 | 
					
					
						
@@ -2,11 +2,15 @@ package form_items
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fyne.io/fyne/v2/widget"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/convertor/view/form_items/h264_nvenc"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/convertor/view/form_items/libx264"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/convertor/view/form_items/libx265"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var Views = map[string]func(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem{
 | 
			
		||||
	"libx264":    libx264.View,
 | 
			
		||||
	"h264_nvenc": h264_nvenc.View,
 | 
			
		||||
	"libx265":    libx265.View,
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										65
									
								
								convertor/view/form_items/h264_nvenc/view.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								convertor/view/form_items/h264_nvenc/view.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
package h264_nvenc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fyne.io/fyne/v2/container"
 | 
			
		||||
	"fyne.io/fyne/v2/widget"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder/h264_nvenc"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
 | 
			
		||||
	"github.com/nicksnyder/go-i18n/v2/i18n"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func View(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem {
 | 
			
		||||
	items := []*widget.FormItem{}
 | 
			
		||||
 | 
			
		||||
	items = append(items, presetParameter(encoder, app)...)
 | 
			
		||||
 | 
			
		||||
	return items
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem {
 | 
			
		||||
	parameter, err := encoder.GetParameter("preset")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	presets := map[string]string{}
 | 
			
		||||
	presetsForSelect := []string{}
 | 
			
		||||
	presetDefault := ""
 | 
			
		||||
 | 
			
		||||
	for _, name := range h264_nvenc.Presets {
 | 
			
		||||
		title := name
 | 
			
		||||
		presetsForSelect = append(presetsForSelect, name)
 | 
			
		||||
		presets[title] = name
 | 
			
		||||
		if name == parameter.Get() {
 | 
			
		||||
			presetDefault = title
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	elementSelect := widget.NewSelect(presetsForSelect, func(s string) {
 | 
			
		||||
		if presets[s] == "" {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		parameter.Set(presets[s])
 | 
			
		||||
	})
 | 
			
		||||
	elementSelect.SetSelected(presetDefault)
 | 
			
		||||
	elementSelect.Hide()
 | 
			
		||||
 | 
			
		||||
	checkboxTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "parameterCheckbox"})
 | 
			
		||||
	elementCheckbox := widget.NewCheck(checkboxTitle, func(b bool) {
 | 
			
		||||
		if b == true {
 | 
			
		||||
			parameter.SetEnable()
 | 
			
		||||
			elementSelect.Show()
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		parameter.SetDisable()
 | 
			
		||||
		elementSelect.Hide()
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	return []*widget.FormItem{
 | 
			
		||||
		{
 | 
			
		||||
			Text:   app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "formPreset"}),
 | 
			
		||||
			Widget: container.NewVBox(elementCheckbox, elementSelect),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										65
									
								
								convertor/view/form_items/libx265/view.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								convertor/view/form_items/libx265/view.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
package libx265
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fyne.io/fyne/v2/container"
 | 
			
		||||
	"fyne.io/fyne/v2/widget"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder/libx265"
 | 
			
		||||
	"git.kor-elf.net/kor-elf/gui-for-ffmpeg/kernel"
 | 
			
		||||
	"github.com/nicksnyder/go-i18n/v2/i18n"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func View(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem {
 | 
			
		||||
	items := []*widget.FormItem{}
 | 
			
		||||
 | 
			
		||||
	items = append(items, presetParameter(encoder, app)...)
 | 
			
		||||
 | 
			
		||||
	return items
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func presetParameter(encoder encoder.EncoderContract, app kernel.AppContract) []*widget.FormItem {
 | 
			
		||||
	parameter, err := encoder.GetParameter("preset")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	presets := map[string]string{}
 | 
			
		||||
	presetsForSelect := []string{}
 | 
			
		||||
	presetDefault := ""
 | 
			
		||||
 | 
			
		||||
	for _, name := range libx265.Presets {
 | 
			
		||||
		title := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "preset_" + name})
 | 
			
		||||
		presetsForSelect = append(presetsForSelect, title)
 | 
			
		||||
		presets[title] = name
 | 
			
		||||
		if name == parameter.Get() {
 | 
			
		||||
			presetDefault = title
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	elementSelect := widget.NewSelect(presetsForSelect, func(s string) {
 | 
			
		||||
		if presets[s] == "" {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		parameter.Set(presets[s])
 | 
			
		||||
	})
 | 
			
		||||
	elementSelect.SetSelected(presetDefault)
 | 
			
		||||
	elementSelect.Hide()
 | 
			
		||||
 | 
			
		||||
	checkboxTitle := app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "parameterCheckbox"})
 | 
			
		||||
	elementCheckbox := widget.NewCheck(checkboxTitle, func(b bool) {
 | 
			
		||||
		if b == true {
 | 
			
		||||
			parameter.SetEnable()
 | 
			
		||||
			elementSelect.Show()
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		parameter.SetDisable()
 | 
			
		||||
		elementSelect.Hide()
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	return []*widget.FormItem{
 | 
			
		||||
		{
 | 
			
		||||
			Text:   app.GetLocalizerService().GetMessage(&i18n.LocalizeConfig{MessageID: "formPreset"}),
 | 
			
		||||
			Widget: container.NewVBox(elementCheckbox, elementSelect),
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -1,13 +1,37 @@
 | 
			
		||||
package h264_nvenc
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	encoder2 "git.kor-elf.net/kor-elf/gui-for-ffmpeg/encoder"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var Presets = []string{
 | 
			
		||||
	"default",
 | 
			
		||||
	"slow",
 | 
			
		||||
	"medium",
 | 
			
		||||
	"fast",
 | 
			
		||||
	"hp",
 | 
			
		||||
	"hq",
 | 
			
		||||
	"bd",
 | 
			
		||||
	"ll",
 | 
			
		||||
	"llhq",
 | 
			
		||||
	"llhp",
 | 
			
		||||
	"lossless",
 | 
			
		||||
	"losslesshp",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewEncoder() encoder2.EncoderContract {
 | 
			
		||||
	parameters := map[string]encoder2.ParameterContract{}
 | 
			
		||||
	parameters := map[string]encoder2.ParameterContract{
 | 
			
		||||
		"preset": newParameterPreset(),
 | 
			
		||||
	}
 | 
			
		||||
	getParams := func(parameters map[string]encoder2.ParameterContract) []string {
 | 
			
		||||
		return []string{"-c:v", "h264_nvenc"}
 | 
			
		||||
		params := []string{"-c:v", "h264_nvenc"}
 | 
			
		||||
 | 
			
		||||
		if parameters["preset"] != nil && parameters["preset"].IsEnabled() {
 | 
			
		||||
			params = append(params, "-preset", parameters["preset"].Get())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return params
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return encoder2.NewEncoder("h264_nvenc", parameters, getParams)
 | 
			
		||||
@@ -19,3 +43,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, "default", setParameter)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,35 @@
 | 
			
		||||
package libx265
 | 
			
		||||
 | 
			
		||||
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"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var Presets = []string{
 | 
			
		||||
	"ultrafast",
 | 
			
		||||
	"superfast",
 | 
			
		||||
	"veryfast",
 | 
			
		||||
	"faster",
 | 
			
		||||
	"fast",
 | 
			
		||||
	"medium",
 | 
			
		||||
	"slow",
 | 
			
		||||
	"slower",
 | 
			
		||||
	"veryslow",
 | 
			
		||||
	"placebo",
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func NewEncoder() encoder2.EncoderContract {
 | 
			
		||||
	parameters := map[string]encoder2.ParameterContract{}
 | 
			
		||||
	parameters := map[string]encoder2.ParameterContract{
 | 
			
		||||
		"preset": newParameterPreset(),
 | 
			
		||||
	}
 | 
			
		||||
	getParams := func(parameters map[string]encoder2.ParameterContract) []string {
 | 
			
		||||
		return []string{"-c:v", "libx265"}
 | 
			
		||||
		params := []string{"-c:v", "libx265"}
 | 
			
		||||
 | 
			
		||||
		if parameters["preset"] != nil && parameters["preset"].IsEnabled() {
 | 
			
		||||
			params = append(params, "-preset", parameters["preset"].Get())
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return params
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return encoder2.NewEncoder("libx265", parameters, getParams)
 | 
			
		||||
@@ -17,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)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user