mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	fix(server): correct media info (#508)
* fix(server): correct media info * fix(server): video metadata
This commit is contained in:
		@@ -64,7 +64,11 @@ export class AssetUploadedProcessor {
 | 
			
		||||
 | 
			
		||||
    // Extract video duration if uploaded from the web & CLI
 | 
			
		||||
    if (asset.type == AssetType.VIDEO) {
 | 
			
		||||
      await this.metadataExtractionQueue.add(videoMetadataExtractionProcessorName, { asset }, { jobId: randomUUID() });
 | 
			
		||||
      await this.metadataExtractionQueue.add(
 | 
			
		||||
        videoMetadataExtractionProcessorName,
 | 
			
		||||
        { asset, fileName, fileSize },
 | 
			
		||||
        { jobId: randomUUID() }
 | 
			
		||||
      );
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -190,7 +190,7 @@ export class MetadataExtractionProcessor {
 | 
			
		||||
 | 
			
		||||
  @Process({ name: videoMetadataExtractionProcessorName, concurrency: 2 })
 | 
			
		||||
  async extractVideoMetadata(job: Job<IVideoLengthExtractionProcessor>) {
 | 
			
		||||
    const { asset } = job.data;
 | 
			
		||||
    const { asset, fileName } = job.data;
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      const data = await new Promise<ffmpeg.FfprobeData>((resolve, reject) =>
 | 
			
		||||
@@ -222,6 +222,7 @@ export class MetadataExtractionProcessor {
 | 
			
		||||
      const newExif = new ExifEntity();
 | 
			
		||||
      newExif.assetId = asset.id;
 | 
			
		||||
      newExif.description = '';
 | 
			
		||||
      newExif.imageName = path.parse(fileName).name || null;
 | 
			
		||||
      newExif.fileSizeInByte = data.format.size || null;
 | 
			
		||||
      newExif.dateTimeOriginal = createdAt ? new Date(createdAt) : null;
 | 
			
		||||
      newExif.modifyDate = null;
 | 
			
		||||
@@ -238,13 +239,14 @@ export class MetadataExtractionProcessor {
 | 
			
		||||
        const match = location.match(locationRegex);
 | 
			
		||||
 | 
			
		||||
        if (match?.length === 3) {
 | 
			
		||||
          newExif.latitude = parseFloat(match[0]);
 | 
			
		||||
          newExif.longitude = parseFloat(match[1]);
 | 
			
		||||
          newExif.latitude = parseFloat(match[1]);
 | 
			
		||||
          newExif.longitude = parseFloat(match[2]);
 | 
			
		||||
        }
 | 
			
		||||
      } else if (videoTags && videoTags['com.apple.quicktime.location.ISO6709']) {
 | 
			
		||||
        const location = videoTags['com.apple.quicktime.location.ISO6709'] as string;
 | 
			
		||||
        const locationRegex = /([+-][0-9]+\.[0-9]+)([+-][0-9]+\.[0-9]+)([+-][0-9]+\.[0-9]+)\/$/;
 | 
			
		||||
        const match = location.match(locationRegex);
 | 
			
		||||
 | 
			
		||||
        if (match?.length === 4) {
 | 
			
		||||
          newExif.latitude = parseFloat(match[1]);
 | 
			
		||||
          newExif.longitude = parseFloat(match[2]);
 | 
			
		||||
 
 | 
			
		||||
@@ -23,6 +23,16 @@ export interface IVideoLengthExtractionProcessor {
 | 
			
		||||
   * The Asset entity that was saved in the database
 | 
			
		||||
   */
 | 
			
		||||
  asset: AssetEntity;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * Original file name
 | 
			
		||||
   */
 | 
			
		||||
  fileName: string;
 | 
			
		||||
 | 
			
		||||
  /**
 | 
			
		||||
   * File size in byte
 | 
			
		||||
   */
 | 
			
		||||
  fileSize: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface IReverseGeocodingProcessor {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user