Files
youtube-downloader/downloader/downloaders/ytdlp-lib.go

66 lines
1.8 KiB
Go

package downloaders
import (
"context"
"fmt"
logger "git.site.quack-lab.dev/dave/cylogger"
"github.com/lrstanley/go-ytdlp"
)
func init() {
// Ensure yt-dlp is installed/up-to-date for this environment.
ytdlp.MustInstall(context.TODO(), nil)
}
var dl = ytdlp.New().
// FormatSort("bestvideo[ext=mp4]+bestaudio[ext=m4a]").
FormatSort("res,ext:mp4:m4a").
Output("C:/Users/Administrator/ytdlpVideos/%(uploader)s/%(title)s.%(ext)s").
LimitRate(fmt.Sprintf("%dM", 150/DOWNLOAD_WORKERS)).
// HTTPChunkSize("20M").
ExtractorArgs("youtube:player_client=android").
MarkWatched().
SponsorblockMark("all").
RecodeVideo("mp4").
ConcurrentFragments(6)
type YTDLPLibDownloader struct{}
func (d *YTDLPLibDownloader) Download(url string) error {
downloadlogger := logger.Default.WithPrefix(fmt.Sprintf("url=%q", url))
_, ongoing := ongoingDownloads[url]
if ongoing {
// return fmt.Errorf("Download %s is already ongoing", url)
downloadlogger.Info("Download is already ongoing")
return nil
}
ongoingDownloadsMutex.Lock()
ongoingDownloads[url] = struct{}{}
ongoingDownloadsMutex.Unlock()
downloadlogger.Info("YTDLPLib downloading")
// go func() {
// err := beeep.Beep(beeep.DefaultFreq, beeep.DefaultDuration)
// if err != nil {
// downloadlogger.Error("Failed beeping with %+v", err)
// }
// err = beeep.Alert("Download Started", url, "assets/information.png")
// if err != nil {
// downloadlogger.Error("Failed alerting with %+v", err)
// }
// }()
_, err := dl.Run(context.TODO(), url)
if err != nil {
return fmt.Errorf("failed downloading %s with %+v", url, err)
}
downloadlogger.Info("Downloaded")
ongoingDownloadsMutex.Lock()
delete(ongoingDownloads, url)
ongoingDownloadsMutex.Unlock()
return nil
}