增加对于MP4文件的创建日期提取。

master
Rui Sun 2023-10-25 22:54:40 +08:00
parent 42864dc9e9
commit 011b9fd749
1 changed files with 32 additions and 2 deletions

View File

@ -4,10 +4,10 @@ using System.IO;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Windows.Interop;
using MetadataExtractor; using MetadataExtractor;
using System.Collections.Generic; using System.Collections.Generic;
using MetadataExtractor.Formats.Exif; using MetadataExtractor.Formats.Exif;
using MetadataExtractor.Formats.QuickTime;
namespace WechatMediaRenamer namespace WechatMediaRenamer
{ {
@ -77,7 +77,9 @@ namespace WechatMediaRenamer
{ {
DateTime? shotDate = null; DateTime? shotDate = null;
IEnumerable<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(FullFilePath); IEnumerable<MetadataExtractor.Directory> directories = ImageMetadataReader.ReadMetadata(FullFilePath);
Print(directories);
foreach (var directory in directories) foreach (var directory in directories)
{
if (directory is ExifSubIfdDirectory) if (directory is ExifSubIfdDirectory)
{ {
var subIfdDirectory = directory as ExifSubIfdDirectory; var subIfdDirectory = directory as ExifSubIfdDirectory;
@ -88,13 +90,41 @@ namespace WechatMediaRenamer
} }
if (subIfdDirectory.ContainsTag(ExifDirectoryBase.TagDateTimeDigitized)) if (subIfdDirectory.ContainsTag(ExifDirectoryBase.TagDateTimeDigitized))
{ {
shotDate = subIfdDirectory.GetDateTime(ExifDirectoryBase.TagDateTimeDigitized); shotDate = subIfdDirectory.GetDateTime(ExifDirectoryBase.TagDateTime);
break; // Exit the loop since we found the shot date break; // Exit the loop since we found the shot date
} }
} }
if (directory is QuickTimeMovieHeaderDirectory)
{
var subDirectory = directory as QuickTimeMovieHeaderDirectory;
if (subDirectory.ContainsTag(QuickTimeMovieHeaderDirectory.TagCreated))
{
shotDate = subDirectory.GetDateTime(QuickTimeMovieHeaderDirectory.TagCreated);
break;
}
}
}
return shotDate; return shotDate;
} }
// Write all extracted values to stdout
static void Print(IEnumerable<MetadataExtractor.Directory> directories)
{
Console.WriteLine();
Console.WriteLine("-------------------------------------------------");
Console.WriteLine();
foreach (var directory in directories)
{
Console.WriteLine($"-------{directory.GetType()}-------");
foreach (var tag in directory.Tags)
{
Console.WriteLine($"{directory.Name} - {tag.Name}({tag.Type}) = {tag.Description}");
Console.WriteLine($" Value: {directory.GetType()}");
}
}
}
private string _GetDateStringFromProperty(Image image, int propertyId) private string _GetDateStringFromProperty(Image image, int propertyId)
{ {
if (!Array.Exists(image.PropertyIdList, id => id == propertyId)) return null; if (!Array.Exists(image.PropertyIdList, id => id == propertyId)) return null;