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()
]
}
}
|