@@ -25,6 +25,25 @@ 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
+ if encoder.supported_samplerates == nil :
34
+ return
35
+
36
+ var allowed: seq [cint ]
37
+ var i: cint = 0
38
+ let samplerates = cast [ptr UncheckedArray[cint ]](encoder.supported_samplerates)
39
+ while samplerates[i] != 0 :
40
+ allowed.add samplerates[i]
41
+ inc i
42
+
43
+ if rate notin allowed:
44
+ let allowedStr = allowed.join(" " )
45
+ error & " samplerate '{ rate} ' not allowed for { encoder.name} codec.\n Allowed: { allowedStr} "
46
+
28
47
proc makeMedia* (args: mainArgs, tl: v3, outputPath: string , rules: Rules, bar: Bar) =
29
48
var options: Table[string , string ]
30
49
var movFlags: seq [string ] = @ []
@@ -68,9 +87,7 @@ proc makeMedia*(args: mainArgs, tl: v3, outputPath: string, rules: Rules, bar: B
68
87
var (aOutStream, aEncCtx) = output.addStream(args.audioCodec, rate = rate,
69
88
layout = tl.layout, metadata = {" language" : " und" }.toTable)
70
89
let encoder = aEncCtx.codec
71
- if encoder.sample_fmts == nil :
72
- error & " { encoder.name} : No known audio formats avail."
73
-
90
+ checkAudioEncoder(encoder, tl.sr)
74
91
aEncCtx.open()
75
92
76
93
# Update stream parameters after opening encoder for formats like AAC in MKV
@@ -98,9 +115,7 @@ proc makeMedia*(args: mainArgs, tl: v3, outputPath: string, rules: Rules, bar: B
98
115
var (aOutStream, aEncCtx) = output.addStream(args.audioCodec, rate = rate,
99
116
layout = tl.layout, metadata = {" language" : tl.a[i].lang} .toTable)
100
117
let encoder = aEncCtx.codec
101
- if encoder.sample_fmts == nil :
102
- error & " { encoder.name} : No known audio formats avail."
103
-
118
+ checkAudioEncoder(encoder, tl.sr)
104
119
aEncCtx.open()
105
120
106
121
# Update stream parameters after opening encoder for formats like AAC in MKV
0 commit comments