Browse Source

fix ffmpeg.go

master v0.0.26
realxlfd 1 month ago
parent
commit
0f2775ba5b
  1. 2
      cliapps/ffmpeg/ffmpeg.go
  2. 81
      cliapps/ffmpeg/options.go
  3. 20
      cliapps/ffmpeg/options_encoders.go

2
cliapps/ffmpeg/ffmpeg.go

@ -24,7 +24,7 @@ func Process(src, dst string, opts ...Option) error {
for _, option := range options {
args = append(
args,
option.Option(),
option.Option()...,
)
}
args = append(

81
cliapps/ffmpeg/options.go

@ -3,9 +3,13 @@ package ffmpeg
import (
"reflect"
"strconv"
"strings"
)
func argsBuilder(arg ...string) []string {
var result []string
return append(result, arg...)
}
func filterOptions(options ...Option) []Option {
cache := make(map[reflect.Type]Option)
for _, option := range options {
@ -20,56 +24,44 @@ func filterOptions(options ...Option) []Option {
}
type Option interface {
Option() string
Option() []string
}
// VideoBitrate the bitrate of the video
type VideoBitrate string
func (b VideoBitrate) Option() string {
s := strings.Builder{}
s.WriteString(`-b:v `)
s.WriteString(string(b))
return s.String()
func (b VideoBitrate) Option() []string {
return argsBuilder("-b:v", string(b))
}
// AudioBitrate the bitrate of the audio
type AudioBitrate string
func (b AudioBitrate) Option() string {
s := strings.Builder{}
s.WriteString(`-b:a `)
s.WriteString(string(b))
return s.String()
func (b AudioBitrate) Option() []string {
return argsBuilder("-b:a", string(b))
}
// CustomOption a custom option that can be used to pass any option to ffmpeg
type CustomOption string
func (o CustomOption) Option() string {
return string(o)
func (o CustomOption) Option() []string {
return argsBuilder(string(o))
}
type CRF int
func (c CRF) Option() string {
func (c CRF) Option() []string {
intC := int(c)
if intC < 0 || intC > 51 {
panic("CRF must be between 0 and 51")
}
s := strings.Builder{}
s.WriteString(`-crf `)
s.WriteString(strconv.Itoa(intC))
return s.String()
return argsBuilder("-crf", strconv.Itoa(intC))
}
type Preset string
func (p Preset) Option() string {
s := strings.Builder{}
s.WriteString(`-preset `)
s.WriteString(string(p))
return s.String()
func (p Preset) Option() []string {
return argsBuilder("-preset", string(p))
}
const (
@ -87,11 +79,8 @@ const (
type Tune string
func (t Tune) Option() string {
s := strings.Builder{}
s.WriteString(`-tune `)
s.WriteString(string(t))
return s.String()
func (t Tune) Option() []string {
return argsBuilder("-tune", string(t))
}
const (
@ -107,11 +96,8 @@ const (
type H264Profile string
func (p H264Profile) Option() string {
s := strings.Builder{}
s.WriteString(`-profile:v `)
s.WriteString(string(p))
return s.String()
func (p H264Profile) Option() []string {
return argsBuilder("-profile:v", string(p))
}
const (
@ -125,21 +111,18 @@ const (
type H265Quality string
func (h H265Quality) Option() string {
return string(h)
func (h H265Quality) Option() []string {
return argsBuilder(`-x265-params`, string(h))
}
const (
H265QualityLossless = `-x265-params lossless=1`
H265QualityLossless = `lossless=1`
)
type AMFQuality string
func (a AMFQuality) Option() string {
s := strings.Builder{}
s.WriteString(`-quality `)
s.WriteString(string(a))
return s.String()
func (a AMFQuality) Option() []string {
return argsBuilder("-quality", string(a))
}
const (
@ -150,11 +133,8 @@ const (
type Accelerator string
func (a Accelerator) Option() string {
s := strings.Builder{}
s.WriteString(`-hwaccel `)
s.WriteString(string(a))
return s.String()
func (a Accelerator) Option() []string {
return argsBuilder("-hwaccel", string(a))
}
const (
@ -170,9 +150,6 @@ const (
type FrameRate int
func (f FrameRate) Option() string {
s := strings.Builder{}
s.WriteString(`-r `)
s.WriteString(strconv.Itoa(int(f)))
return s.String()
func (f FrameRate) Option() []string {
return argsBuilder("-r", strconv.Itoa(int(f)))
}

20
cliapps/ffmpeg/options_encoders.go

@ -1,14 +1,9 @@
package ffmpeg
import "strings"
type VideoEncoder string
func (v VideoEncoder) Option() string {
s := strings.Builder{}
s.WriteString(`-c:v `)
s.WriteString(string(v))
return s.String()
func (v VideoEncoder) Option() []string {
return argsBuilder("-c:v", string(v))
}
// Video encoders
@ -64,11 +59,8 @@ const (
type AudioEncoder string
func (a AudioEncoder) Option() string {
s := strings.Builder{}
s.WriteString(`-c:a `)
s.WriteString(string(a))
return s.String()
func (a AudioEncoder) Option() []string {
return argsBuilder("-c:a", string(a))
}
const (
@ -81,8 +73,8 @@ const (
type None string
func (n None) Option() string {
return string(n)
func (n None) Option() []string {
return argsBuilder(string(n))
}
const (

Loading…
Cancel
Save