From 20326f2f39b470c2256b775bf3663e95400d4c47 Mon Sep 17 00:00:00 2001 From: bel Date: Sat, 1 Feb 2020 20:03:47 +0000 Subject: [PATCH] Set metadata and fix dl path --- main.go | 2 +- youtubedl/client.go | 40 +++++++++++++++++++++++++++++++++------- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index bdbddc3..f2daed1 100755 --- a/main.go +++ b/main.go @@ -57,7 +57,7 @@ func do(client *youtubedl.Client) error { log.Printf("already exists: %s", target) continue } - if err := client.Download(result.Link, path.Join(config.Root, target)); err != nil { + if err := client.Download(result.Link, target); err != nil { errs += ", " + err.Error() } } diff --git a/youtubedl/client.go b/youtubedl/client.go index 737f640..bb03696 100755 --- a/youtubedl/client.go +++ b/youtubedl/client.go @@ -15,15 +15,41 @@ func New() (*Client, error) { } func (c *Client) Download(video, local string) error { - cmd := exec.Command("youtube-dl", "-f", "22", "-o", local, "--write-sub", "--write-auto-sub", "--sub-format", "srt", video) - log.Println(cmd.Path, cmd.Args) - out, err := cmd.CombinedOutput() - if err != nil { - err = fmt.Errorf("%v: %s", err, out) + errs := []error{} + for _, extras := range [][]string{ + []string{"--metadata-from-title", ".*[0-9]/[0-9][0-9] (?P.+)"}, + []string{}, + } { + args := append([]string{ + "youtube-dl", + "-f", + "22", + "-o", + local, + "--write-sub", + "--write-auto-sub", + "--sub-format", + "srt", + }, extras...) + args = append(args, video) + cmd := exec.Command(args[0], args[1:]...) + log.Println(cmd.Path, cmd.Args) + out, err := cmd.CombinedOutput() + if err != nil { + log.Printf("failed with %v: %s", err, out) + errs = append(errs, fmt.Errorf("%v: %s", err, out)) + } else { + log.Printf("passed with %s", out) + errs = nil + break + } + } + if len(errs) > 0 { + err := fmt.Errorf("%v", errs) return err } - cmd = exec.Command("python3", "-m", "vtt_to_srt", path.Dir(local)) - out, err = cmd.CombinedOutput() + cmd := exec.Command("python3", "-m", "vtt_to_srt", path.Dir(local)) + out, err := cmd.CombinedOutput() if err != nil { err = fmt.Errorf("%v: %s", err, out) return err