import * as ffmpeg from 'fluent-ffmpeg'
import { VideoResolution } from '../../shared/models/videos'
import { CONFIG, MAX_VIDEO_TRANSCODING_FPS } from '../initializers'
+import { processImage } from './image-utils'
+import { join } from 'path'
async function getVideoFileHeight (path: string) {
const videoStream = await getVideoFileStream(path)
})
}
-function generateImageFromVideoFile (fromPath: string, folder: string, imageName: string, size: string) {
+async function generateImageFromVideoFile (fromPath: string, folder: string, imageName: string, size: { width: number, height: number }) {
+ const pendingImageName = 'pending-' + imageName
+
const options = {
- filename: imageName,
+ filename: pendingImageName,
count: 1,
folder
}
- if (size !== undefined) {
- options['size'] = size
- }
-
- return new Promise<string>((res, rej) => {
+ await new Promise<string>((res, rej) => {
ffmpeg(fromPath)
.on('error', rej)
.on('end', () => res(imageName))
.thumbnail(options)
})
+
+ const pendingImagePath = join(folder, pendingImageName)
+ const destination = join(folder, imageName)
+ await processImage({ path: pendingImagePath }, destination, size)
}
type TranscodeOptions = {
}
createPreview (videoFile: VideoFileModel) {
- const imageSize = PREVIEWS_SIZE.width + 'x' + PREVIEWS_SIZE.height
-
return generateImageFromVideoFile(
this.getVideoFilePath(videoFile),
CONFIG.STORAGE.PREVIEWS_DIR,
this.getPreviewName(),
- imageSize
+ PREVIEWS_SIZE
)
}
createThumbnail (videoFile: VideoFileModel) {
- const imageSize = THUMBNAILS_SIZE.width + 'x' + THUMBNAILS_SIZE.height
-
return generateImageFromVideoFile(
this.getVideoFilePath(videoFile),
CONFIG.STORAGE.THUMBNAILS_DIR,
this.getThumbnailName(),
- imageSize
+ THUMBNAILS_SIZE
)
}