Simpler thumbnail generation
This commit is contained in:
parent
318aa9c422
commit
b7f946892b
2 changed files with 12 additions and 16 deletions
|
@ -51,7 +51,7 @@ async function generateImageFromVideoFile (options: {
|
|||
const pendingImagePath = join(folder, pendingImageName)
|
||||
|
||||
try {
|
||||
await generateThumbnailFromVideo({ fromPath, folder, imageName })
|
||||
await generateThumbnailFromVideo({ fromPath, output: pendingImagePath })
|
||||
|
||||
const destination = join(folder, imageName)
|
||||
await processImage({ path: pendingImagePath, destination, newSize: size })
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import { FFmpegCommandWrapper, FFmpegCommandWrapperOptions } from './ffmpeg-command-wrapper'
|
||||
import { getVideoStreamDuration } from './ffprobe'
|
||||
|
||||
export class FFmpegImage {
|
||||
private readonly commandWrapper: FFmpegCommandWrapper
|
||||
|
@ -36,25 +37,20 @@ export class FFmpegImage {
|
|||
|
||||
async generateThumbnailFromVideo (options: {
|
||||
fromPath: string
|
||||
folder: string
|
||||
imageName: string
|
||||
output: string
|
||||
}) {
|
||||
const { fromPath, folder, imageName } = options
|
||||
const { fromPath, output } = options
|
||||
|
||||
const pendingImageName = 'pending-' + imageName
|
||||
let duration = await getVideoStreamDuration(fromPath)
|
||||
if (isNaN(duration)) duration = 0
|
||||
|
||||
const thumbnailOptions = {
|
||||
filename: pendingImageName,
|
||||
count: 1,
|
||||
folder
|
||||
}
|
||||
this.commandWrapper.buildCommand(fromPath)
|
||||
.seekInput(duration / 2)
|
||||
.videoFilter('thumbnail=500')
|
||||
.outputOption('-frames:v 1')
|
||||
.output(output)
|
||||
|
||||
return new Promise<string>((res, rej) => {
|
||||
this.commandWrapper.buildCommand(fromPath)
|
||||
.on('error', rej)
|
||||
.on('end', () => res(imageName))
|
||||
.thumbnail(thumbnailOptions)
|
||||
})
|
||||
return this.commandWrapper.runCommand()
|
||||
}
|
||||
|
||||
async generateStoryboardFromVideo (options: {
|
||||
|
|
Loading…
Add table
Reference in a new issue