diff options
| author | Nathan Perry <avaglir@gmail.com> | 2017-07-28 00:51:34 -0400 |
|---|---|---|
| committer | Nathan Perry <avaglir@gmail.com> | 2017-07-28 00:51:34 -0400 |
| commit | 47877a3045c745e70b2e77a91e1f59e6f432c5df (patch) | |
| tree | dfcb8b1ea145c33c04aee45dd0c46824bf5fec36 /downloader/downloader.go | |
| parent | 54359c61daadf1d61730d224675c3b4595a5b83a (diff) | |
try own wav impl
Diffstat (limited to 'downloader/downloader.go')
| -rw-r--r-- | downloader/downloader.go | 80 |
1 files changed, 80 insertions, 0 deletions
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 +} |
