@@ -25,6 +25,30 @@ proc initPriority(index: float64, frame: ptr AVFrame, stream: ptr AVStream): Pri
25
25
26
26
proc `<` (a, b: Priority): bool = a.index < b.index
27
27
28
+
29
+ proc checkAudioEncoder(encoder: ptr AVCodec, rate: cint ) =
30
+ if encoder.sample_fmts == nil :
31
+ error & " { encoder.name} : No known audio formats avail."
32
+
33
+ var allowed: seq [cint ]
34
+
35
+ if encoder.supported_samplerates != nil :
36
+ var i: cint = 0
37
+ let samplerates = cast [ptr UncheckedArray[cint ]](encoder.supported_samplerates)
38
+ while samplerates[i] != 0 :
39
+ allowed.add samplerates[i]
40
+ inc i
41
+ else :
42
+ if encoder.id == 86018 : # aac_at
43
+ allowed = @ [48000 , 44100 , 32000 , 24000 , 22050 , 16000 , 12000 , 11025 , 8000 ]
44
+ else :
45
+ debug " audio encoder claims to support every samplerate"
46
+ return
47
+
48
+ if rate notin allowed:
49
+ let allowedStr = allowed.join(" " )
50
+ error & " samplerate '{ rate} ' not allowed for { encoder.name} .\n Allowed: { allowedStr} "
51
+
28
52
proc makeMedia* (args: mainArgs, tl: v3, outputPath: string , rules: Rules, bar: Bar) =
29
53
var options: Table[string , string ]
30
54
var movFlags: seq [string ] = @ []
@@ -68,9 +92,7 @@ proc makeMedia*(args: mainArgs, tl: v3, outputPath: string, rules: Rules, bar: B
68
92
var (aOutStream, aEncCtx) = output.addStream(args.audioCodec, rate = rate,
69
93
layout = tl.layout, metadata = {" language" : " und" }.toTable)
70
94
let encoder = aEncCtx.codec
71
- if encoder.sample_fmts == nil :
72
- error & " { encoder.name} : No known audio formats avail."
73
-
95
+ checkAudioEncoder(encoder, tl.sr)
74
96
aEncCtx.open()
75
97
76
98
# Update stream parameters after opening encoder for formats like AAC in MKV
@@ -98,9 +120,7 @@ proc makeMedia*(args: mainArgs, tl: v3, outputPath: string, rules: Rules, bar: B
98
120
var (aOutStream, aEncCtx) = output.addStream(args.audioCodec, rate = rate,
99
121
layout = tl.layout, metadata = {" language" : tl.a[i].lang} .toTable)
100
122
let encoder = aEncCtx.codec
101
- if encoder.sample_fmts == nil :
102
- error & " { encoder.name} : No known audio formats avail."
103
-
123
+ checkAudioEncoder(encoder, tl.sr)
104
124
aEncCtx.open()
105
125
106
126
# Update stream parameters after opening encoder for formats like AAC in MKV
0 commit comments