Usando EXIFTool para adicionar dados EXIF de nomes de arquivos

1

Há um conjunto de fotos com carimbos de data e hora em seus nomes de arquivos como estes:

Photo on 3-09-12 at 9.24 PM #2.jpg

Photo on 3-09-12 at 9.24 PM #1.jpg

Photo on 3-09-12 at 8.23 PM.jpg

etc.

("3-09-12" significa "3 de setembro de 2012" ou DD-MM-AA)

Mas essas fotos não têm dados EXIF. Antes de importá-los para uma coleção maior, como você canalizaria essas informações para exiftool e também informaria para adicionar novos timestamps como dados EXIF, todos a partir dos nomes de arquivos das fotos?

Atualizar : (O agora Pt. 1) minha pergunta sobre a análise de nomes de arquivos com DD-MM-AA e 12 horas foi muito gentilmente respondida por @Stephane . Mas eu descobri que o mesmo lote de fotos contém nomes de arquivos com uma variação que eu perdi. Espero que faça mais sentido adicionar um 'Pt. 2 'em vez de iniciar uma nova pergunta.

Em suma :

Como eu poderia mudar a brilhante resposta de @Stephane -

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*?at.*?[AP]M)/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*[PA]M*.jpg

- para que funcione com o formato do nome do arquivo abaixo, o que é um pouco diferente da primeira parte da pergunta, pois usa AAAA-MM-DD e 24 horas:

Photo on 2010-09-15 at 18.44 #4.jpg

Photo on 2010-09-15 at 18.44 #3.jpg

Photo on 2010-09-15 at 18.44.jpg

Mais explicações:

Tentar editar a parte Date::Manip do roteiro de Stephane parece mostrar minha ignorância sobre o que está acontecendo nas partes mais importantes dela.

Eu tentei omitir a linha Date_Init , pois estamos de volta a um formato de data ISO-ano inteiro e, em seguida, tendo

/on (.*?at.*?)/;$_=$1;
y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
' ./*on\ *at*.jpg

Mas exiftool está me dando no writeable tags e FileName not defined . As instruções no link não parecem ser úteis (pelo menos para mim) na compreensão do que está acontecendo com esses períodos, que 'y' no início da linha, ponto-e-vírgula, etc, e eles são bastante improváveis: S

    
por iceequal 08.05.2014 / 11:20

1 resposta

2

Tente:

exiftool '-CreateDate<${FileName;use Date::Manip;
                      Date_Init("DateFormat=non-US");
                      /on (.*at.*?)(?: #\d+)?\.jpg$/;$_=$1;
                      y/./:/;$_=UnixDate($_,"%Y-%m-%d %T")
                      }' ./*on\ *at*.jpg

(você pode ter que instalar o módulo Date::Manip perl ).

O -Tag<value define a tag correspondente. O ${tag;perl-code} pode ser usado para expandir para o valor de tag depois de ter sido processado pelo perl-code .

Aqui, o plano é usar a função Date::Manip do UnixDate para analisar a data no nome do arquivo e convertê-la em um formato aceitável para a tag CreateDate ( 2011-04-15 21:38:00 ).

Date::Manip compreende muitos formatos de data comuns. Por exemplo, ele entende 3-09-12 at 9:24 PM (embora você tenha que dizer se é a convenção dos EUA ou fora dos EUA onde o dia ou mês é o primeiro) e 2010-09-15 at 18.44 (observe o : em vez de . ). / p>

Então, o que fazemos é extrair essa parte do nome do arquivo, converter o . para : e passá-lo para UnixDate .

    
por 08.05.2014 / 11:57