From be12a9f5a1340cb20677224e86e863625a708ccb Mon Sep 17 00:00:00 2001 From: WithoutPants <53250216+WithoutPants@users.noreply.github.com> Date: Tue, 5 Nov 2019 08:34:57 +1100 Subject: [PATCH] Fix ffmpeg error output (#176) --- pkg/ffmpeg/encoder.go | 10 +++++++--- pkg/ffmpeg/encoder_marker.go | 4 ++-- pkg/ffmpeg/encoder_scene_preview_chunk.go | 9 +++++---- pkg/ffmpeg/encoder_screenshot.go | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/pkg/ffmpeg/encoder.go b/pkg/ffmpeg/encoder.go index 28fc4b3a0..405fc317a 100644 --- a/pkg/ffmpeg/encoder.go +++ b/pkg/ffmpeg/encoder.go @@ -59,8 +59,8 @@ func KillRunningEncoders(path string) { // wait for the process to die before returning // don't wait more than a few seconds done := make(chan error) - go func() { - _, err := process.Wait() + go func() { + _, err := process.Wait() done <- err }() @@ -91,6 +91,7 @@ func (e *Encoder) run(probeResult VideoFile, args []string) (string, error) { } buf := make([]byte, 80) + var errBuilder strings.Builder for { n, err := stderr.Read(buf) if n > 0 { @@ -100,6 +101,8 @@ func (e *Encoder) run(probeResult VideoFile, args []string) (string, error) { progress := time / probeResult.Duration logger.Infof("Progress %.2f", progress) } + + errBuilder.WriteString(data) } if err != nil { break @@ -113,7 +116,8 @@ func (e *Encoder) run(probeResult VideoFile, args []string) (string, error) { err = waitAndDeregister(probeResult.Path, cmd) if err != nil { - logger.Errorf("ffmpeg error when running command <%s>: %s", strings.Join(cmd.Args, " "), stdoutString) + // error message should be in the stderr stream + logger.Errorf("ffmpeg error when running command <%s>: %s", strings.Join(cmd.Args, " "), errBuilder.String()) return stdoutString, err } diff --git a/pkg/ffmpeg/encoder_marker.go b/pkg/ffmpeg/encoder_marker.go index bdf45e0f3..73ef8e790 100644 --- a/pkg/ffmpeg/encoder_marker.go +++ b/pkg/ffmpeg/encoder_marker.go @@ -14,7 +14,7 @@ type SceneMarkerOptions struct { func (e *Encoder) SceneMarkerVideo(probeResult VideoFile, options SceneMarkerOptions) error { args := []string{ - "-v", "quiet", + "-v", "error", "-ss", strconv.Itoa(options.Seconds), "-t", "20", "-i", probeResult.Path, @@ -40,7 +40,7 @@ func (e *Encoder) SceneMarkerVideo(probeResult VideoFile, options SceneMarkerOpt func (e *Encoder) SceneMarkerImage(probeResult VideoFile, options SceneMarkerOptions) error { args := []string{ - "-v", "quiet", + "-v", "error", "-ss", strconv.Itoa(options.Seconds), "-t", "5", "-i", probeResult.Path, diff --git a/pkg/ffmpeg/encoder_scene_preview_chunk.go b/pkg/ffmpeg/encoder_scene_preview_chunk.go index fd5488eed..f1c07a4dd 100644 --- a/pkg/ffmpeg/encoder_scene_preview_chunk.go +++ b/pkg/ffmpeg/encoder_scene_preview_chunk.go @@ -2,8 +2,9 @@ package ffmpeg import ( "fmt" - "github.com/stashapp/stash/pkg/utils" "strconv" + + "github.com/stashapp/stash/pkg/utils" ) type ScenePreviewChunkOptions struct { @@ -14,7 +15,7 @@ type ScenePreviewChunkOptions struct { func (e *Encoder) ScenePreviewVideoChunk(probeResult VideoFile, options ScenePreviewChunkOptions) { args := []string{ - "-v", "quiet", + "-v", "error", "-ss", strconv.Itoa(options.Time), "-t", "0.75", "-i", probeResult.Path, @@ -38,7 +39,7 @@ func (e *Encoder) ScenePreviewVideoChunk(probeResult VideoFile, options ScenePre func (e *Encoder) ScenePreviewVideoChunkCombine(probeResult VideoFile, concatFilePath string, outputPath string) { args := []string{ - "-v", "quiet", + "-v", "error", "-f", "concat", "-i", utils.FixWindowsPath(concatFilePath), "-y", @@ -50,7 +51,7 @@ func (e *Encoder) ScenePreviewVideoChunkCombine(probeResult VideoFile, concatFil func (e *Encoder) ScenePreviewVideoToImage(probeResult VideoFile, width int, videoPreviewPath string, outputPath string) error { args := []string{ - "-v", "quiet", + "-v", "error", "-i", videoPreviewPath, "-y", "-c:v", "libwebp", diff --git a/pkg/ffmpeg/encoder_screenshot.go b/pkg/ffmpeg/encoder_screenshot.go index 14ced4d18..f9923cf1e 100644 --- a/pkg/ffmpeg/encoder_screenshot.go +++ b/pkg/ffmpeg/encoder_screenshot.go @@ -12,7 +12,7 @@ type ScreenshotOptions struct { func (e *Encoder) Screenshot(probeResult VideoFile, options ScreenshotOptions) { if options.Verbosity == "" { - options.Verbosity = "quiet" + options.Verbosity = "error" } if options.Quality == 0 { options.Quality = 1