mirror of https://github.com/stashapp/stash.git
68 lines
1.5 KiB
Go
68 lines
1.5 KiB
Go
package transcoder
|
|
|
|
import (
|
|
"runtime"
|
|
"strings"
|
|
|
|
"github.com/stashapp/stash/pkg/ffmpeg"
|
|
)
|
|
|
|
type SpliceOptions struct {
|
|
OutputPath string
|
|
Format ffmpeg.Format
|
|
|
|
VideoCodec ffmpeg.VideoCodec
|
|
VideoArgs ffmpeg.Args
|
|
|
|
AudioCodec ffmpeg.AudioCodec
|
|
AudioArgs ffmpeg.Args
|
|
|
|
// Verbosity is the logging verbosity. Defaults to LogLevelError if not set.
|
|
Verbosity ffmpeg.LogLevel
|
|
}
|
|
|
|
func (o *SpliceOptions) setDefaults() {
|
|
if o.Verbosity == "" {
|
|
o.Verbosity = ffmpeg.LogLevelError
|
|
}
|
|
}
|
|
|
|
// fixWindowsPath replaces \ with / in the given path because the \ isn't recognized as valid on windows ffmpeg
|
|
func fixWindowsPath(str string) string {
|
|
if runtime.GOOS == "windows" {
|
|
return strings.ReplaceAll(str, `\`, "/")
|
|
}
|
|
return str
|
|
}
|
|
|
|
func Splice(concatFile string, options SpliceOptions) ffmpeg.Args {
|
|
options.setDefaults()
|
|
|
|
var args ffmpeg.Args
|
|
args = args.LogLevel(options.Verbosity)
|
|
args = args.Format(ffmpeg.FormatConcat)
|
|
args = args.Input(fixWindowsPath(concatFile))
|
|
args = args.Overwrite()
|
|
|
|
// if video codec is not provided, then use copy
|
|
if options.VideoCodec == "" {
|
|
options.VideoCodec = ffmpeg.VideoCodecCopy
|
|
}
|
|
|
|
args = args.VideoCodec(options.VideoCodec)
|
|
args = args.AppendArgs(options.VideoArgs)
|
|
|
|
// if audio codec is not provided, then use copy
|
|
if options.AudioCodec == "" {
|
|
options.AudioCodec = ffmpeg.AudioCodecCopy
|
|
}
|
|
|
|
args = args.AudioCodec(options.AudioCodec)
|
|
args = args.AppendArgs(options.AudioArgs)
|
|
|
|
args = args.Format(options.Format)
|
|
args = args.Output(options.OutputPath)
|
|
|
|
return args
|
|
}
|