Fixed wrong return and added stderr error output when merging with ffmpeg

This commit is contained in:
bytedream 2022-02-20 13:16:58 +01:00
parent 18ce16b3bd
commit 3dfc69e2d9

View file

@ -2,6 +2,7 @@ package crunchyroll
import ( import (
"bufio" "bufio"
"bytes"
"context" "context"
"fmt" "fmt"
"github.com/grafov/m3u8" "github.com/grafov/m3u8"
@ -37,7 +38,14 @@ func (f *Format) Download(downloader Downloader) error {
if _, err := os.Stat(downloader.Filename); err == nil && !downloader.IgnoreExisting { if _, err := os.Stat(downloader.Filename); err == nil && !downloader.IgnoreExisting {
return fmt.Errorf("file %s already exists", downloader.Filename) return fmt.Errorf("file %s already exists", downloader.Filename)
} }
if _, err := os.Stat(downloader.TempDir); err == nil && !downloader.IgnoreExisting { if _, err := os.Stat(downloader.TempDir); err != nil {
if os.IsNotExist(err) {
err = os.Mkdir(downloader.TempDir, 0755)
}
if err != nil {
return err
}
} else if !downloader.IgnoreExisting {
content, err := os.ReadDir(downloader.TempDir) content, err := os.ReadDir(downloader.TempDir)
if err != nil { if err != nil {
return err return err
@ -45,12 +53,6 @@ func (f *Format) Download(downloader Downloader) error {
if len(content) > 0 { if len(content) > 0 {
return fmt.Errorf("directory %s is not empty", downloader.Filename) return fmt.Errorf("directory %s is not empty", downloader.Filename)
} }
} else if err != nil && os.IsNotExist(err) {
if err := os.Mkdir(downloader.TempDir, 0755); err != nil {
return err
}
} else {
return err
} }
if downloader.DeleteTempAfter { if downloader.DeleteTempAfter {
@ -142,8 +144,11 @@ func mergeSegmentsFFmpeg(context context.Context, tempDir string, outputFile str
} }
command = append(command, outputFile) command = append(command, outputFile)
var errBuf bytes.Buffer
cmd := exec.Command("ffmpeg", cmd := exec.Command("ffmpeg",
command...) command...)
cmd.Stderr = &errBuf
if err := cmd.Start(); err != nil { if err := cmd.Start(); err != nil {
return err return err
} }
@ -154,8 +159,8 @@ func mergeSegmentsFFmpeg(context context.Context, tempDir string, outputFile str
}() }()
select { select {
case err := <-cmdChan: case <-cmdChan:
return err return fmt.Errorf(errBuf.String())
case <-context.Done(): case <-context.Done():
cmd.Process.Kill() cmd.Process.Kill()
return context.Err() return context.Err()