package main import ( "context" "fmt" "time" "github.com/lrstanley/go-ytdlp" ) type DownloadOptions struct { EmbedThumbnail bool IncludeSubtitles bool } func downloadVideo(out_dir, url string, opts DownloadOptions) { dl := ytdlp.New(). SetWorkDir(out_dir). FormatSort("res,ext:mp4:m4a"). RecodeVideo("mp4"). ProgressFunc(100*time.Millisecond, func(prog ytdlp.ProgressUpdate) { fmt.Printf( "%s @ %s [eta: %s] :: %s\n", prog.Status, prog.PercentString(), prog.ETA(), prog.Filename, ) }). Output("%(title)s.%(ext)s") if opts.EmbedThumbnail { dl = dl.EmbedThumbnail() } if opts.IncludeSubtitles { dl = dl.CompatOptions("no-keep-subs") dl = dl.EmbedSubs() dl = dl.SubLangs("en,en*") dl = dl.WriteAutoSubs() dl = dl.WriteSubs() } _, err := dl.Run(context.TODO(), url) if err != nil { panic(err) } }