|
@@ -7,7 +7,6 @@ import { IBaseJob, IEntityJob, IJobRepository, JobName, JOBS_ASSET_PAGINATION_SI
|
|
import { IStorageRepository, StorageCore, StorageFolder } from '../storage';
|
|
import { IStorageRepository, StorageCore, StorageFolder } from '../storage';
|
|
import { ISystemConfigRepository, SystemConfigFFmpegDto } from '../system-config';
|
|
import { ISystemConfigRepository, SystemConfigFFmpegDto } from '../system-config';
|
|
import { SystemConfigCore } from '../system-config/system-config.core';
|
|
import { SystemConfigCore } from '../system-config/system-config.core';
|
|
-import { JPEG_THUMBNAIL_SIZE, WEBP_THUMBNAIL_SIZE } from './media.constant';
|
|
|
|
import { AudioStreamInfo, IMediaRepository, VideoCodecHWConfig, VideoStreamInfo } from './media.repository';
|
|
import { AudioStreamInfo, IMediaRepository, VideoCodecHWConfig, VideoStreamInfo } from './media.repository';
|
|
import { H264Config, HEVCConfig, NVENCConfig, QSVConfig, ThumbnailConfig, VAAPIConfig, VP9Config } from './media.util';
|
|
import { H264Config, HEVCConfig, NVENCConfig, QSVConfig, ThumbnailConfig, VAAPIConfig, VP9Config } from './media.util';
|
|
|
|
|
|
@@ -63,11 +62,12 @@ export class MediaService {
|
|
const resizePath = this.storageCore.getFolderLocation(StorageFolder.THUMBNAILS, asset.ownerId);
|
|
const resizePath = this.storageCore.getFolderLocation(StorageFolder.THUMBNAILS, asset.ownerId);
|
|
this.storageRepository.mkdirSync(resizePath);
|
|
this.storageRepository.mkdirSync(resizePath);
|
|
const jpegThumbnailPath = join(resizePath, `${asset.id}.jpeg`);
|
|
const jpegThumbnailPath = join(resizePath, `${asset.id}.jpeg`);
|
|
|
|
+ const { thumbnail } = await this.configCore.getConfig();
|
|
|
|
|
|
switch (asset.type) {
|
|
switch (asset.type) {
|
|
case AssetType.IMAGE:
|
|
case AssetType.IMAGE:
|
|
await this.mediaRepository.resize(asset.originalPath, jpegThumbnailPath, {
|
|
await this.mediaRepository.resize(asset.originalPath, jpegThumbnailPath, {
|
|
- size: JPEG_THUMBNAIL_SIZE,
|
|
|
|
|
|
+ size: thumbnail.jpegSize,
|
|
format: 'jpeg',
|
|
format: 'jpeg',
|
|
});
|
|
});
|
|
this.logger.log(`Successfully generated image thumbnail ${asset.id}`);
|
|
this.logger.log(`Successfully generated image thumbnail ${asset.id}`);
|
|
@@ -80,7 +80,7 @@ export class MediaService {
|
|
return false;
|
|
return false;
|
|
}
|
|
}
|
|
const { ffmpeg } = await this.configCore.getConfig();
|
|
const { ffmpeg } = await this.configCore.getConfig();
|
|
- const config = { ...ffmpeg, targetResolution: JPEG_THUMBNAIL_SIZE.toString(), twoPass: false };
|
|
|
|
|
|
+ const config = { ...ffmpeg, targetResolution: thumbnail.jpegSize.toString(), twoPass: false };
|
|
const options = new ThumbnailConfig(config).getOptions(mainVideoStream);
|
|
const options = new ThumbnailConfig(config).getOptions(mainVideoStream);
|
|
await this.mediaRepository.transcode(asset.originalPath, jpegThumbnailPath, options);
|
|
await this.mediaRepository.transcode(asset.originalPath, jpegThumbnailPath, options);
|
|
this.logger.log(`Successfully generated video thumbnail ${asset.id}`);
|
|
this.logger.log(`Successfully generated video thumbnail ${asset.id}`);
|
|
@@ -100,7 +100,8 @@ export class MediaService {
|
|
|
|
|
|
const webpPath = asset.resizePath.replace('jpeg', 'webp').replace('jpg', 'webp');
|
|
const webpPath = asset.resizePath.replace('jpeg', 'webp').replace('jpg', 'webp');
|
|
|
|
|
|
- await this.mediaRepository.resize(asset.resizePath, webpPath, { size: WEBP_THUMBNAIL_SIZE, format: 'webp' });
|
|
|
|
|
|
+ const { thumbnail } = await this.configCore.getConfig();
|
|
|
|
+ await this.mediaRepository.resize(asset.resizePath, webpPath, { size: thumbnail.webpSize, format: 'webp' });
|
|
await this.assetRepository.save({ id: asset.id, webpPath });
|
|
await this.assetRepository.save({ id: asset.id, webpPath });
|
|
|
|
|
|
return true;
|
|
return true;
|