From 47877a3045c745e70b2e77a91e1f59e6f432c5df Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Fri, 28 Jul 2017 00:51:34 -0400 Subject: try own wav impl --- downloader/downloader.go | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 downloader/downloader.go (limited to 'downloader/downloader.go') diff --git a/downloader/downloader.go b/downloader/downloader.go new file mode 100644 index 0000000..1ebaa1d --- /dev/null +++ b/downloader/downloader.go @@ -0,0 +1,80 @@ +package downloader + +import ( + "net/url" + "os/exec" + "strconv" + "time" + + "io/ioutil" + "os" + + "github.com/cryptix/wav" + "github.com/op/go-logging" +) + +var log = logging.MustGetLogger("downloader") + +func getUrl(inUrl string) (string, error) { + dl := exec.Command("youtube-dl", "-f", "bestaudio", "-x", "--get-url", inUrl) + + b, err := dl.CombinedOutput() + if err != nil { + log.Errorf("youtube-dl failed: %v", string(b)) + return "", err + } + + tgt, err := url.Parse(string(b)) + out := tgt.Scheme + "://" + tgt.Host + tgt.Path + "?" + tgt.Query().Encode() + + return out, nil +} + +func Download(inUrl string, startTime time.Duration, duration time.Duration) error { + targetUrl, err := getUrl(inUrl) + if err != nil { + return err + } + + startSecond := int(startTime.Seconds()) + dur := int(duration.Seconds()) + + args := []string{ + "-ss", strconv.Itoa(startSecond), + "-i", targetUrl, + "-c:a", "pcm_s16le", + "-f", "wav", + "-ar", "44100", + "-ac", "2", + "-vn", "-y", + } + + if dur > 0 { + args = append(args, "-t", strconv.Itoa(dur)) + } + + file, err := ioutil.TempFile("", "dl") + if err != nil { + return err + } + defer func() { + if err := os.Remove(file.Name()); err != nil { + log.Errorf("unable to remove temp file: %q", err) + } + }() + + args = append(args, file.Name()) + + dl := exec.Command(`ffmpeg`, args...) + b, err := dl.CombinedOutput() + if err != nil { + log.Errorf("ffmpeg failed: \n%v", string(b)) + return err + } + + wav.NewReader(file, ) + + + + return nil +} -- cgit v1.3.1