@@ -136,11 +136,12 @@ if (opts.infoJson) {
136
136
const filters = [ ] ;
137
137
138
138
/**
139
+ * @param {string } name
139
140
* @param {string } field
140
141
* @param {string } regexpStr
141
142
* @param {boolean|null } negated
142
143
*/
143
- const createFilter = ( field , regexpStr , negated ) => {
144
+ const createFilter = ( name , field , regexpStr , negated ) => {
144
145
let regexp ;
145
146
try {
146
147
regexp = new RegExp ( regexpStr , 'i' ) ;
@@ -149,19 +150,22 @@ if (opts.infoJson) {
149
150
process . exit ( 1 ) ;
150
151
}
151
152
152
- filters . push ( format => negated !== regexp . test ( format [ field ] ) ) ;
153
+ filters . push ( [ name , format => negated !== regexp . test ( format [ field ] ) ] ) ;
153
154
} ;
154
155
155
156
[ 'container' , 'resolution:qualityLabel' , 'encoding' ] . forEach ( ( field ) => {
156
157
let [ fieldName , fieldKey ] = field . split ( ':' ) ;
158
+ fieldKey = fieldKey || fieldName ;
157
159
let optsKey = 'filter' + fieldName [ 0 ] . toUpperCase ( ) + fieldName . slice ( 1 ) ;
160
+ let value = opts [ optsKey ] ;
161
+ let name = `${ fieldName } =${ value } ` ;
158
162
if ( opts [ optsKey ] ) {
159
- createFilter ( fieldKey , opts [ optsKey ] , false ) ;
163
+ createFilter ( name , fieldKey , value , false ) ;
160
164
}
161
165
162
166
optsKey = 'un' + optsKey ;
163
167
if ( opts [ optsKey ] ) {
164
- createFilter ( fieldKey , opts [ optsKey ] , true ) ;
168
+ createFilter ( name , fieldKey , value , true ) ;
165
169
}
166
170
} ) ;
167
171
@@ -171,24 +175,24 @@ if (opts.infoJson) {
171
175
const hasAudio = format => ! ! format . audioBitrate ;
172
176
switch ( opts . filter ) {
173
177
case 'video' :
174
- filters . push ( hasVideo ) ;
178
+ filters . push ( [ 'video' , hasVideo ] ) ;
175
179
break ;
176
180
177
181
case 'videoonly' :
178
- filters . push ( format => hasVideo ( format ) && ! hasAudio ( format ) ) ;
182
+ filters . push ( [ 'videoonly' , format => hasVideo ( format ) && ! hasAudio ( format ) ] ) ;
179
183
break ;
180
184
181
185
case 'audio' :
182
- filters . push ( hasAudio ) ;
186
+ filters . push ( [ 'audio' , hasAudio ] ) ;
183
187
break ;
184
188
185
189
case 'audioonly' :
186
- filters . push ( format => ! hasVideo ( format ) && hasAudio ( format ) ) ;
190
+ filters . push ( [ 'audioonly' , format => ! hasVideo ( format ) && hasAudio ( format ) ] ) ;
187
191
break ;
188
192
}
189
193
190
194
ytdlOptions . filter = ( format ) => {
191
- return filters . every ( filter => filter <
8000
span class="pl-kos">(format ) ) ;
195
+ return filters . every ( filter => filter [ 1 ] ( format ) ) ;
192
196
} ;
193
197
194
198
if ( opts . printUrl ) {
@@ -353,7 +357,11 @@ if (opts.infoJson) {
353
357
} ) ;
354
358
355
359
readStream . on ( 'error' , ( err ) => {
356
- console . error ( err . message ) ;
360
+ if ( / N o s u c h f o r m a t f o u n d / . test ( err . message ) && filters . length ) {
361
+ console . error ( `No videos matching filters: ${ filters . map ( filter => filter [ 0 ] ) . join ( ', ' ) } ` ) ;
362
+ } else {
363
+ console . error ( err . message ) ;
364
+ }
357
365
process . exit ( 1 ) ;
358
366
} ) ;
359
367
0 commit comments