1
1
const { defaultArgs, baseOptions } = require ( './config' ) ;
2
- const { setLogging, setCustomLogger, log } = require ( './utils/log' ) ;
3
- const parseProgress = require ( './utils/parseProgress' ) ;
4
2
const parseArgs = require ( './utils/parseArgs' ) ;
5
3
const { defaultOptions, getCreateFFmpegCore } = require ( './node' ) ;
6
4
const { version } = require ( '../package.json' ) ;
@@ -23,7 +21,11 @@ module.exports = (_options = {}) => {
23
21
let runResolve = null ;
24
22
let runReject = null ;
25
23
let running = false ;
24
+ let customLogger = ( ) => { } ;
26
25
let progress = optProgress ;
26
+ let duration = 0 ;
27
+ let ratio = 0 ;
28
+
27
29
const detectCompletion = ( message ) => {
28
30
if ( message === 'FFMPEG_END' && runResolve !== null ) {
29
31
runResolve ( ) ;
@@ -32,6 +34,36 @@ module.exports = (_options = {}) => {
32
34
running = false ;
33
35
}
34
36
} ;
37
+ const log = ( type , message ) => {
38
+ customLogger ( { type, message } ) ;
39
+ if ( logging ) {
40
+ console . log ( `[${ type } ] ${ message } ` ) ;
41
+ }
42
+ } ;
43
+ const ts2sec = ( ts ) => {
44
+ const [ h , m , s ] = ts . split ( ':' ) ;
45
+ return ( parseFloat ( h ) * 60 * 60 ) + ( parseFloat ( m ) * 60 ) + parseFloat ( s ) ;
46
+ } ;
47
+ const parseProgress = ( message , progress ) => {
48
+ if ( typeof message === 'string' ) {
49
+ if ( message . startsWith ( ' Duration' ) ) {
50
+ const ts = message . split ( ', ' ) [ 0 ] . split ( ': ' ) [ 1 ] ;
51
+ const d = ts2sec ( ts ) ;
52
+ progress ( { duration : d , ratio } ) ;
53
+ if ( duration === 0 || duration > d ) {
54
+ duration = d ;
55
+ }
56
+ } else if ( message . startsWith ( 'frame' ) || message . startsWith ( 'size' ) ) {
57
+ const ts = message . split ( 'time=' ) [ 1 ] . split ( ' ' ) [ 0 ] ;
58
+ const t = ts2sec ( ts ) ;
59
+ ratio = t / duration ;
60
+ progress ( { ratio, time : t } ) ;
61
+ } else if ( message . startsWith ( 'video:' ) ) {
62
+ progress ( { ratio : 1 } ) ;
63
+ duration = 0 ;
64
+ }
65
+ }
66
+ } ;
35
67
const parseMessage = ( { type, message } ) => {
36
68
log ( type , message ) ;
37
69
parseProgress ( message , progress ) ;
@@ -203,11 +235,12 @@ module.exports = (_options = {}) => {
203
235
} ;
204
236
205
237
const setLogger = ( _logger ) => {
206
- setCustomLogger ( _logger ) ;
238
+ customLogger = _logger ;
207
239
} ;
208
240
209
- setLogging ( logging ) ;
210
- setCustomLogger ( logger ) ;
241
+ const setLogging = ( _logging ) => {
242
+ logging = _logging ;
243
+ } ;
211
244
212
245
log ( 'info' , `use ffmpeg.wasm v${ version } ` ) ;
213
246
0 commit comments