Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 21x 21x 21x 21x 21x 21x 21x 21x 21x 21x 12x 12x 21x 21x 21x 21x 21x 21x 21x 21x 21x 21x 15x 15x 21x 21x 8x 2x 8x 6x 6x 6x 8x 21x 21x 11x 8x 11x 3x 3x 11x 21x 21x 11x 11x 11x 2x 2x 11x 11x 1x 11x 2x 2x 11x 11x 1x 1x 11x 11x 1x 1x 11x 11x 11x 21x 21x 11x 11x 11x 11x 11x 11x 11x 21x | import { Readable } from 'node:stream' import { protocolRegexp } from './utils/regexp' export type InputSource = string | Readable export type InputOptions = { source: InputSource format?: string fps?: 'native' | number seek?: string | number loop?: boolean customArgs?: string[] } export type InputDefinition = InputOptions | InputSource export class FfmpegInput implements InputOptions { source: InputSource format?: string fps?: 'native' | number seek?: string | number loop?: boolean customArgs: string[] constructor(options: InputDefinition) { if (typeof options === 'string' || options instanceof Readable) { options = { source: options } } this.source = options.source this.format = options.format this.fps = options.fps this.seek = options.seek this.loop = options.loop this.customArgs = options.customArgs || [] } get isStream(): boolean { return this.source instanceof Readable } get isLocalFile(): boolean { if (this.source instanceof Readable || this.format === 'lavfi') { return false } else { let protocol = this.source.match(protocolRegexp) return !protocol || protocol[1] === 'file' } } #getSourceString(): string { if (typeof this.source === 'string') { return this.source } else { return 'pipe:0' } } #getOptions(): string[] { let options: string[] = [] if (this.format) { options.push('-f', this.format) } if (this.fps === 'native') { options.push('-re') } else if (this.fps) { options.push('-r', this.fps.toString()) } if (this.seek) { options.push('-ss', this.seek.toString()) } if (this.loop) { options.push('-loop', '1') } return options } getFfmpegArguments(): string[] { return [ ...this.#getOptions(), ...this.customArgs, '-i', this.#getSourceString() ] } } |