@@ -28,6 +28,8 @@ class MediaSplit extends EventEmitter {
28
28
* @param {string } options.format - Output format (mp3, m4a, flac, etc)
29
29
* @param {boolean } options.audioonly - Force download only audio files when using a url as input
30
30
* @param {string } options.quality - Download quality
31
+ * @param {string[] } options.inputParams - FFMpeg additional input parameters
32
+ * @param {string[] } options.outputParams - FFMpeg additional output parameters
31
33
* @return MediaSplit
32
34
*/
33
35
constructor ( options = { } ) {
@@ -43,10 +45,20 @@ class MediaSplit extends EventEmitter {
43
45
output : '.' ,
44
46
format : 'mp3' ,
45
47
audioonly : false ,
46
- quality : 'highest'
48
+ quality : 'highest' ,
49
+ inputParams : [ ] ,
50
+ outputParams : [ ]
47
51
}
48
52
49
- this . _options = Object . assign ( defaults , options )
53
+ this . _options = Object . assign (
54
+ defaults ,
55
+ options ,
56
+ {
57
+ inputParams : this . _sanitizeParams ( options . inputParams ) ,
58
+ outputParams : this . _sanitizeParams ( options . outputParams )
59
+ }
60
+ )
61
+
50
62
this . _inputFile = ''
51
63
this . _downloadOptions = { }
52
64
}
@@ -327,6 +339,7 @@ class MediaSplit extends EventEmitter {
327
339
'-hide_banner' ,
328
340
'-loglevel' , 'repeat+error' ,
329
341
'-y' ,
342
+ ...this . _options . inputParams ,
330
343
'-i' , this . _inputFile ,
331
344
'-ss' , section . start
332
345
]
@@ -353,6 +366,9 @@ class MediaSplit extends EventEmitter {
353
366
args . push ( '-metadata' , `${ name } =${ value } ` )
354
367
}
355
368
369
+ // Additional ffmpeg output arguments
370
+ args . push ( ...this . _options . outputParams )
371
+
356
372
// And finally the output path
357
373
args . push ( path . join ( this . _options . output , section . name ) )
358
374
@@ -373,6 +389,15 @@ class MediaSplit extends EventEmitter {
373
389
return Promise . all ( promises )
374
390
}
375
391
392
+ /**
393
+ * @param {string[] } params
394
+ */
395
+ _sanitizeParams ( params ) {
396
+ return ( params || [ ] )
397
+ . map ( ( x ) => x . replace ( / ^ ( " | ' ) / gim, '' ) . replace ( / ( " | ' ) $ / gim, '' ) )
398
+ . flatMap ( x => x . split ( ' ' ) )
399
+ }
400
+
376
401
_checkAccess ( dir , mode ) {
377
402
return new Promise ( ( resolve , reject ) => fs . access ( dir , mode , ( err ) => err ? reject ( err ) : resolve ( dir ) ) )
378
403
}
0 commit comments