mirror of
https://github.com/krau/SaveAny-Bot.git
synced 2026-06-25 17:23:50 +08:00
41 lines
1.2 KiB
Go
41 lines
1.2 KiB
Go
package ytdlp
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
ytdlp "github.com/lrstanley/go-ytdlp"
|
|
|
|
"github.com/krau/SaveAny-Bot/config"
|
|
)
|
|
|
|
// buildFormatSelector translates a max height into a yt-dlp format selector.
|
|
// It prefers merging the best video+audio within the height limit, then falls
|
|
// back to a single muxed stream. An empty result means "no explicit selector".
|
|
func buildFormatSelector(maxHeight int) string {
|
|
if maxHeight <= 0 {
|
|
return ""
|
|
}
|
|
h := strconv.Itoa(maxHeight)
|
|
return "bv*[height<=" + h + "]+ba/b[height<=" + h + "]/b"
|
|
}
|
|
|
|
// applyFormatConfig configures format/quality on the yt-dlp command according to
|
|
// the ytdlp config. It is only meant to be called when the user did not supply
|
|
// any custom flags, so config-driven defaults never conflict with user input.
|
|
func applyFormatConfig(cmd *ytdlp.Command, cfg config.YtdlpConfig) *ytdlp.Command {
|
|
switch {
|
|
case cfg.Format != "":
|
|
cmd = cmd.Format(cfg.Format)
|
|
case cfg.MaxHeight > 0:
|
|
cmd = cmd.Format(buildFormatSelector(cfg.MaxHeight))
|
|
default:
|
|
// Preserve the original default: prefer highest resolution mp4/m4a.
|
|
cmd = cmd.FormatSort("res,ext:mp4:m4a")
|
|
}
|
|
if cfg.Recode != "" {
|
|
cmd = cmd.RecodeVideo(cfg.Recode)
|
|
}
|
|
cmd = cmd.RestrictFilenames()
|
|
return cmd
|
|
}
|