harden qobuz and downloader reliability edge cases

This commit is contained in:
2026-04-21 18:54:10 +02:00
parent 0161c01a4c
commit de4e561377
8 changed files with 424 additions and 35 deletions

View File

@@ -72,6 +72,17 @@ func buildFFmpegArgs(inputPath, outputPath string, p profile, cfg config.Convers
"-c:a", p.codecLib,
}
if supportsAttachedPicture(p.ext) {
args = append(args,
"-map", "0:v:0?",
"-c:v", "mjpeg",
"-disposition:v:0", "attached_pic",
)
if p.ext == "mp3" {
args = append(args, "-id3v2_version", "3")
}
}
if p.lossless {
filter := buildLosslessFilter(cfg)
if filter != "" {
@@ -87,6 +98,15 @@ func buildFFmpegArgs(inputPath, outputPath string, p profile, cfg config.Convers
return args
}
func supportsAttachedPicture(ext string) bool {
switch strings.TrimPrefix(strings.ToLower(ext), ".") {
case "flac", "mp3", "m4a", "mp4":
return true
default:
return false
}
}
func buildLosslessFilter(cfg config.ConversionConfig) string {
parts := make([]string, 0, 2)
if cfg.SamplingRate > 0 {

View File

@@ -28,6 +28,12 @@ func TestBuildFFmpegArgsLossless(t *testing.T) {
if !strings.Contains(joined, "sample_fmts=s16p|s16") {
t.Fatalf("missing bit depth filter args=%s", joined)
}
if !strings.Contains(joined, "-map 0:v:0?") {
t.Fatalf("missing optional cover map args=%s", joined)
}
if !strings.Contains(joined, "-disposition:v:0 attached_pic") {
t.Fatalf("missing attached_pic disposition args=%s", joined)
}
}
func TestBuildFFmpegArgsLossy(t *testing.T) {
@@ -40,4 +46,16 @@ func TestBuildFFmpegArgsLossy(t *testing.T) {
if !strings.Contains(joined, "-b:a 320k") {
t.Fatalf("missing bitrate args=%s", joined)
}
if !strings.Contains(joined, "-id3v2_version 3") {
t.Fatalf("missing id3v2 args=%s", joined)
}
}
func TestBuildFFmpegArgsNoCoverForOpus(t *testing.T) {
cfg := config.ConversionConfig{Enabled: true, Codec: "OPUS", LossyBitrate: 192}
args := buildFFmpegArgs("in.flac", "out.opus", profiles["OPUS"], cfg)
joined := strings.Join(args, " ")
if strings.Contains(joined, "-map 0:v:0?") {
t.Fatalf("unexpected cover map args=%s", joined)
}
}