From 740f02bf6bc49c69f588e79cede930621aa3d3e1 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 +++++++++++++++++++++++++++++++++------- youtubedl/install.go | 20 +++++++++++--------- 3 files changed, 45 insertions(+), 17 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..8de188c 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{"--add-metadata", "--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 diff --git a/youtubedl/install.go b/youtubedl/install.go index 52ea35c..87bdda5 100755 --- a/youtubedl/install.go +++ b/youtubedl/install.go @@ -7,7 +7,7 @@ import ( ) func install() error { - if err := installPyPip3(); err != nil { + if err := installPyPip3FFMPEG(); err != nil { return err } if err := installYtdl(); err != nil { @@ -19,21 +19,23 @@ func install() error { return nil } -func installPyPip3() error { +func installPyPip3FFMPEG() error { hasPy := exec.Command("python3", "--version") hasPip := exec.Command("pip3", "--version") + hasFFMPEG := exec.Command("which", "ffmpeg") if err := hasPy.Run(); err != nil { } else if err := hasPip.Run(); err != nil { + } else if err := hasFFMPEG.Run(); err != nil { } else { return nil } for _, combo := range [][]string{ - []string{"sudo", "apt", "install", "python3", "pip3"}, - []string{"apt", "install", "python3", "pip3"}, - []string{"apk", "add", "python3", "py3-pip"}, - []string{"sudo", "apk", "add", "python3", "py3-pip"}, - []string{"/sbin/apk", "add", "python3", "py3-pip"}, - []string{"sudo", "/sbin/apk", "add", "python3", "py3-pip"}, + []string{"sudo", "apt", "install", "python3", "pip3", "ffmpeg"}, + []string{"apt", "install", "python3", "pip3", "ffmpeg"}, + []string{"apk", "add", "python3", "py3-pip", "ffmpeg"}, + []string{"sudo", "apk", "add", "python3", "py3-pip", "ffmpeg"}, + []string{"/sbin/apk", "add", "python3", "py3-pip", "ffmpeg"}, + []string{"sudo", "/sbin/apk", "add", "python3", "py3-pip", "ffmpeg"}, } { cmd := exec.Command(combo[0], combo[1:]...) err := cmd.Run() @@ -42,7 +44,7 @@ func installPyPip3() error { } log.Println("%v: %v", err, combo) } - return errors.New("cannot get python3 and pip3") + return errors.New("cannot get python3 and pip3 and ffmpeg") } func installYtdl() error {