ReNamer:Scripts:Exiv2: Difference between revisions
 (Tested versions of ReNamer)  | 
				m (→Code 1)  | 
				||
| Line 11: | Line 11: | ||
Author: Denis Kozlov. Date: 2013-04-01.  | 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''  | Extract unformatted line out of the command line output of the <code>exiv2.exe</code> tool. This sample script extracts ''Image Timestamp'', but you can adjust <code>EXIV</code> and <code>TAG</code> 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.  | '''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.  | ||
Revision as of 13:48, 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
- exiv2.exe 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 sample script extracts Image Timestamp, but you can 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.
- Tested with ReNamer v5.70.
 
{ 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).
- Tested with ReNamer 6.3.
 
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.