Difference between revisions of "ReNamer:Scripts:Exiv2"
(Updated script to ReNamer 5.70 and Exiv 0.23) |
(Added code for extracting and reformatting EXIF dates.) |
||
Line 5: | Line 5: | ||
* [http://www.exiv2.org/download.html exiv2.exe] v0.23 in ReNamer's folder | * [http://www.exiv2.org/download.html exiv2.exe] v0.23 in ReNamer's folder | ||
− | == Code == | + | == Code 1 == |
Author: Denis Kozlov. Date: 2013-04-01. Extract unformatted line out of the command line output of the <code>exiv2.exe</code> tool. This script extracts ''Image Timestamp''. Adjust <code>EXIV</code> and <code>TAG</code> constants to extract other tags. | Author: Denis Kozlov. Date: 2013-04-01. Extract unformatted line out of the command line output of the <code>exiv2.exe</code> tool. This script extracts ''Image Timestamp''. Adjust <code>EXIV</code> and <code>TAG</code> constants to extract other tags. | ||
Line 37: | Line 37: | ||
EXE = 'exiv2.exe -pi'; | EXE = 'exiv2.exe -pi'; | ||
TAG = 'Iptc.Application2.Headline\s*\w*\s*\d*\s*(.*?)[\r\n]'; | TAG = 'Iptc.Application2.Headline\s*\w*\s*\d*\s*(.*?)[\r\n]'; | ||
+ | </source> | ||
+ | |||
+ | == Code 2 == | ||
+ | |||
+ | Author: Denis Kozlov. Date: 2015-11-25. Extract EXIF date and reformat it according to user specification (<tt>DATE_FORMAT</tt> constant). | ||
+ | |||
+ | <source> | ||
+ | const | ||
+ | EXIV = 'exiv2.exe'; | ||
+ | DATE_TAG = 'Image timestamp\s*\:\s*(.*?)[\r\n]'; | ||
+ | DATE_PARTS = '(.+)\:(.+)\:(.+)\ (.+)\:(.+)\:(.+)'; | ||
+ | DATE_FORMAT = 'YYYY-MM-DD HH.NN.SS'; | ||
+ | |||
+ | var | ||
+ | Command, Output: String; | ||
+ | Matches, DateParts: TStringsArray; | ||
+ | Year, Month, Day, Hours, Minutes, Seconds: Integer; | ||
+ | Date: TDateTime; | ||
+ | DateOK: Boolean; | ||
+ | |||
+ | begin | ||
+ | Command := EXIV + ' "' + FilePath + '"'; | ||
+ | if ExecConsoleApp(Command, Output) = 0 then | ||
+ | begin | ||
+ | Matches := SubMatchesRegEx(Output, DATE_TAG, False); | ||
+ | if Length(Matches) > 0 then | ||
+ | begin | ||
+ | DateParts := SubMatchesRegEx(Matches[0], DATE_PARTS, False); | ||
+ | if Length(DateParts) > 0 then | ||
+ | begin | ||
+ | DateOK := | ||
+ | TryStrToInt(DateParts[0], Year) and TryStrToInt(DateParts[1], Month) and | ||
+ | TryStrToInt(DateParts[2], Day) and TryStrToInt(DateParts[3], Hours) and | ||
+ | TryStrToInt(DateParts[4], Minutes) and TryStrToInt(DateParts[5], Seconds); | ||
+ | if DateOK then | ||
+ | begin | ||
+ | Date := EncodeDateTime(Year, Month, Day, Hours, Minutes, Seconds, 0); | ||
+ | FileName := FormatDateTime(DATE_FORMAT, Date) + WideExtractFileExt(FileName); | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | end; | ||
+ | end. | ||
</source> | </source> |
Revision as of 14:34, 25 November 2015
Script integrates Exiv2 library in order to extract EXIF/IPTC/XMP tags from many types of images. CRW, CR2, RAW images are also supported.
Requirements
- ReNamer v5.70
- exiv2.exe v0.23 in ReNamer's folder
Code 1
Author: Denis Kozlov. Date: 2013-04-01. Extract unformatted line out of the command line output of the exiv2.exe
tool. This script extracts Image Timestamp. Adjust EXIV
and TAG
constants to extract other tags.
Hint: Image Timestamp value is usually formatted as "yyyy:mm:dd hh:mm:ss" which contains an illegal filename character ":". The illegal character can be easily replaced using an additional Replace rule.
{ Extract EXIF/IPTC/XMP tags using Exiv2 }
const
EXE = 'exiv2.exe';
TAG = 'Image timestamp\s*\:\s*(.*?)[\r\n]';
var
Command, Output: String;
Matches: TStringsArray;
begin
Command := EXE+' "'+FilePath+'"';
if ExecConsoleApp(Command, Output) = 0 then
begin
Matches := SubMatchesRegEx(Output, TAG, False);
if Length(Matches) > 0 then
FileName := Matches[0] + WideExtractFileExt(FileName);
end;
end.
To extract IPTC Headline tag, you would need to make following changes:
EXE = 'exiv2.exe -pi';
TAG = 'Iptc.Application2.Headline\s*\w*\s*\d*\s*(.*?)[\r\n]';
Code 2
Author: Denis Kozlov. Date: 2015-11-25. Extract EXIF date and reformat it according to user specification (DATE_FORMAT constant).
const
EXIV = 'exiv2.exe';
DATE_TAG = 'Image timestamp\s*\:\s*(.*?)[\r\n]';
DATE_PARTS = '(.+)\:(.+)\:(.+)\ (.+)\:(.+)\:(.+)';
DATE_FORMAT = 'YYYY-MM-DD HH.NN.SS';
var
Command, Output: String;
Matches, DateParts: TStringsArray;
Year, Month, Day, Hours, Minutes, Seconds: Integer;
Date: TDateTime;
DateOK: Boolean;
begin
Command := EXIV + ' "' + FilePath + '"';
if ExecConsoleApp(Command, Output) = 0 then
begin
Matches := SubMatchesRegEx(Output, DATE_TAG, False);
if Length(Matches) > 0 then
begin
DateParts := SubMatchesRegEx(Matches[0], DATE_PARTS, False);
if Length(DateParts) > 0 then
begin
DateOK :=
TryStrToInt(DateParts[0], Year) and TryStrToInt(DateParts[1], Month) and
TryStrToInt(DateParts[2], Day) and TryStrToInt(DateParts[3], Hours) and
TryStrToInt(DateParts[4], Minutes) and TryStrToInt(DateParts[5], Seconds);
if DateOK then
begin
Date := EncodeDateTime(Year, Month, Day, Hours, Minutes, Seconds, 0);
FileName := FormatDateTime(DATE_FORMAT, Date) + WideExtractFileExt(FileName);
end;
end;
end;
end;
end.