🚧 Trim with ffmpeg
This commit is contained in:
parent
a706d16c5a
commit
5b2896c032
3 changed files with 75 additions and 0 deletions
57
media/ffmpeg.go
Normal file
57
media/ffmpeg.go
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
package media
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"codeberg.org/danjones000/strip-beats/config"
|
||||
ffmpeg "github.com/u2takey/ffmpeg-go"
|
||||
)
|
||||
|
||||
func TrimWithFade(in Probe, out string, start, stop, up, down float64) error {
|
||||
// -ss (start) -t (end) -af afade=t=in:st=(start):d=(up),afade=t=out:st=(downstart):d=(down)
|
||||
st := in.GetFirstAcceptableAudio()
|
||||
if st == nil {
|
||||
return errors.New("Can't find an audio stream")
|
||||
}
|
||||
args := ffmpeg.KwArgs{"c:a": "copy"}
|
||||
if start != 0 {
|
||||
args["ss"] = start
|
||||
}
|
||||
if stop != 0 {
|
||||
end := stop - start
|
||||
args["t"] = end
|
||||
} else {
|
||||
stop = st.Duration
|
||||
}
|
||||
|
||||
input := ffmpeg.Input(in.Format.Path).Get(strconv.Itoa(st.Index))
|
||||
if up != 0 {
|
||||
args["c:a"] = config.GetConfig().FfEncoder
|
||||
input = input.Filter("afade", ffmpeg.Args{
|
||||
"t=in",
|
||||
fmt.Sprintf("st=%v", start),
|
||||
fmt.Sprintf("d=%v", up)})
|
||||
}
|
||||
|
||||
if down != 0 {
|
||||
args["c:a"] = config.GetConfig().FfEncoder
|
||||
downstart := stop - down
|
||||
input = input.Filter("afade", ffmpeg.Args{
|
||||
"t=out",
|
||||
fmt.Sprintf("st=%v", downstart),
|
||||
fmt.Sprintf("d=%v", down)})
|
||||
}
|
||||
output := input.Output(out, args).GlobalArgs("-y")
|
||||
// @todo out should be stdout
|
||||
return output.Run()
|
||||
}
|
||||
|
||||
func Trim(in Probe, out string, start, stop float64) error {
|
||||
return TrimWithFade(in, out, start, stop, 0, 0)
|
||||
}
|
||||
|
||||
func Fade(in Probe, out string, up, down float64) error {
|
||||
return TrimWithFade(in, out, 0, 0, up, down)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue