Added scene preview generator

This commit is contained in:
Stash Dev
2019-02-09 21:30:54 -08:00
parent 16ead91a05
commit 1aa7557432
12 changed files with 575 additions and 167 deletions

View File

@@ -1,7 +1,6 @@
package ffmpeg
import (
"fmt"
"github.com/stashapp/stash/logger"
"io/ioutil"
"os/exec"
@@ -11,65 +10,17 @@ import (
var progressRegex = regexp.MustCompile(`time=(\d+):(\d+):(\d+.\d+)`)
type encoder struct {
type Encoder struct {
Path string
}
func NewEncoder(ffmpegPath string) encoder {
return encoder{
func NewEncoder(ffmpegPath string) Encoder {
return Encoder{
Path: ffmpegPath,
}
}
type ScreenshotOptions struct {
OutputPath string
Quality int
Time float64
Width int
Verbosity string
}
type TranscodeOptions struct {
OutputPath string
}
func (e *encoder) Screenshot(probeResult FFProbeResult, options ScreenshotOptions) {
if options.Verbosity == "" {
options.Verbosity = "quiet"
}
if options.Quality == 0 {
options.Quality = 1
}
args := []string{
"-v", options.Verbosity,
"-ss", fmt.Sprintf("%v", options.Time),
"-y",
"-i", probeResult.Path, // TODO: Wrap in quotes?
"-vframes", "1",
"-q:v", fmt.Sprintf("%v", options.Quality),
"-vf", fmt.Sprintf("scale=%v:-1", options.Width),
"-f", "image2",
options.OutputPath,
}
_, _ = e.run(probeResult, args)
}
func (e *encoder) Transcode(probeResult FFProbeResult, options TranscodeOptions) {
args := []string{
"-i", probeResult.Path,
"-c:v", "libx264",
"-profile:v", "high",
"-level", "4.2",
"-preset", "superfast",
"-crf", "23",
"-vf", "scale=iw:-2",
"-c:a", "aac",
options.OutputPath,
}
_, _ = e.run(probeResult, args)
}
func (e *encoder) run(probeResult FFProbeResult, args []string) (string, error) {
func (e *Encoder) run(probeResult VideoFile, args []string) (string, error) {
cmd := exec.Command(e.Path, args...)
stderr, err := cmd.StderrPipe()