Add initial implementations for encoder handling and conversion logic
Introduce encoder modules for various codecs and formats (e.g., h264_nvenc, libx264, libmp3lame). Add `Convertor` logic to retrieve supported formats via FFmpeg utilities and manage encoders for audio, video, and image processing.
This commit is contained in:
58
internal/ffmpeg/encoder/h264_nvenc/encoder.go
Normal file
58
internal/ffmpeg/encoder/h264_nvenc/encoder.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package h264_nvenc
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"git.kor-elf.net/kor-elf/gui-for-ffmpeg/internal/ffmpeg/encoder"
|
||||
)
|
||||
|
||||
var Presets = []string{
|
||||
"default",
|
||||
"slow",
|
||||
"medium",
|
||||
"fast",
|
||||
"hp",
|
||||
"hq",
|
||||
"bd",
|
||||
"ll",
|
||||
"llhq",
|
||||
"llhp",
|
||||
"lossless",
|
||||
"losslesshp",
|
||||
}
|
||||
|
||||
func NewEncoder() encoder.EncoderContract {
|
||||
parameters := map[string]encoder.ParameterContract{
|
||||
"preset": newParameterPreset(),
|
||||
}
|
||||
getParams := func(parameters map[string]encoder.ParameterContract) []string {
|
||||
params := []string{"-c:v", "h264_nvenc"}
|
||||
|
||||
if parameters["preset"] != nil && parameters["preset"].IsEnabled() {
|
||||
params = append(params, "-preset", parameters["preset"].Get())
|
||||
}
|
||||
|
||||
return params
|
||||
}
|
||||
|
||||
return encoder.NewEncoder("h264_nvenc", parameters, getParams)
|
||||
}
|
||||
|
||||
func NewData() encoder.EncoderDataContract {
|
||||
title := "h264_nvenc"
|
||||
formats := []string{"mp4"}
|
||||
fileType := encoder.FileType(encoder.Video)
|
||||
return encoder.NewData(title, formats, fileType, NewEncoder)
|
||||
}
|
||||
|
||||
func newParameterPreset() encoder.ParameterContract {
|
||||
setParameter := func(s string) (string, error) {
|
||||
for _, value := range Presets {
|
||||
if value == s {
|
||||
return value, nil
|
||||
}
|
||||
}
|
||||
|
||||
return "", errors.New("preset not found")
|
||||
}
|
||||
return encoder.NewParameter("preset", false, "default", setParameter)
|
||||
}
|
Reference in New Issue
Block a user