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' ) ;
@@ -22,14 +20,48 @@ module.exports = (_options = {}) => {
22
20
let ffmpeg = null ;
23
21
let runResolve = null ;
24
22
let running = false ;
23
+ let customLogger = ( ) => { } ;
25
24
let progress = optProgress ;
25
+ let duration = 0 ;
26
+ let ratio = 0 ;
27
+
26
28
const detectCompletion = ( message ) => {
27
29
if ( message === 'FFMPEG_END' && runResolve !== null ) {
28
30
runResolve ( ) ;
29
31
runResolve = null ;
30
32
running = false ;
31
33
}
32
34
} ;
35
+ const log = ( type , message ) => {
36
+ customLogger ( { type, message } ) ;
37
+ if ( logging ) {
38
+ console . log ( `[${ type } ] ${ message } ` ) ;
39
+ }
40
+ } ;
41
+ const ts2sec = ( ts ) => {
42
+ const [ h , m , s ] = ts . split ( ':' ) ;
43
+ return ( parseFloat ( h ) * 60 * 60 ) + ( parseFloat ( m ) * 60 ) + parseFloat ( s ) ;
44
+ } ;
45
+ const parseProgress = ( message , progress ) => {
46
+ if ( typeof message === 'string' ) {
47
+ if ( message . startsWith ( ' Duration' ) ) {
48
+ const ts = message . split ( ', ' ) [ 0 ] . split ( ': ' ) [ 1 ] ;
49
+ const d = ts2sec ( ts ) ;
50
+ progress ( { duration : d , ratio } ) ;
51
+ if ( duration === 0 || duration > d ) {
52
+ duration = d ;
53
+ }
54
+ } else if ( message . startsWith ( 'frame' ) || message . startsWith ( 'size' ) ) {
55
+ const ts = message . split ( 'time=' ) [ 1 ] . split ( ' ' ) [ 0 ] ;
56
+ const t = ts2sec ( ts ) ;
57
+ ratio = t / duration ;
58
+ progress ( { ratio, time : t } ) ;
59
+ } else if ( message . startsWith ( 'video:' ) ) {
60
+ progress ( { ratio : 1 } ) ;
61
+ duration = 0 ;
62
+ }
63
+ }
64
+ } ;
33
65
const parseMessage = ( { type, message } ) => {
34
66
log ( type , message ) ;
35
67
parseProgress ( message , progress ) ;
@@ -190,11 +222,12 @@ module.exports = (_options = {}) => {
190
222
} ;
191
223
192
224
const setLogger = ( _logger ) => {
193
- setCustomLogger ( _logger ) ;
225
+ customLogger = _logger ;
194
226
} ;
195
227
196
- setLogging ( logging ) ;
197
- setCustomLogger ( logger ) ;
228
+ const setLogging = ( _logging ) => {
229
+ logging = _logging ;
230
+ } ;
198
231
199
232
log ( 'info' , `use ffmpeg.wasm v${ version } ` ) ;
200
233
0 commit comments