Renomeando com exiftool: como lidar com tags ausentes?

6

Estou lidando com um grande grupo desorganizado de arquivos de mídia, capturados usando várias câmeras e filmadoras diferentes, e gostaria de usar o exiftool em um script bash para renomear cada arquivo com sua data e hora de criação, criador e modelo.

Com este comando, as imagens são renomeadas como eu quero:

exiftool -m -P '-filename<${DateTimeOriginal}_${Make}_${Model}.%e' myfile.jpg

Eu já sei que posso formatar a data e a hora usando a opção -d FMT, mas estou omitindo isso para maior clareza.

Aqui estão os problemas que estou enfrentando com vídeos "* .mov" de DSLR:

  1. exiftool está removendo a extensão .mov, mesmo que use ".mov" em vez de ".% e" no modelo de nome de arquivo
  2. esses arquivos não têm a tag DateTimeOriginal e eu tenho que usar a tag MediaCreateDate que outros arquivos não têm

Alguém sabe como "forçar" o exiftool a usar a extensão .mov original?

Existe uma maneira de dizer ao exiftool para verificar se existe uma tag exif ou não? E usar outra tag se a primeira não estiver lá?

Eu tentei com algo como

if [ -n 'exiftool -m -p '$DateTime' filename]
then
...

Mas exiftool está me soltando um erro, então a verificação da string vazia sempre falha. Alguma dica?

    
por gerlos 02.06.2013 / 18:21

2 respostas

6

Graças ao feedback de Phil Harvey, o dev de exiftool, encontrou uma solução muito simples para o meu problema, que funciona com o exiftool 9.30.

Phil diz aqui ( link ):

The last valid assignment supersedes the others.

Assim, podemos fazer tudo com apenas um comando. Aqui está o código final:

#!/bin/bash
exiftool -P -d '%Y-%m-%d %H.%M.%S' \
    '-filename<${CreateDate}_${Model;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}.%e' \
    '-filename<${DateTimeOriginal}_${Make;}_${Model;}.%e' \
    $@

O ponto-e-vírgula é uma solução para lidar com o problema de extensão ausente mencionado acima (na verdade, foi devido a um valor nulo nas tags do meu modelo).

Uma coisa boa dessa abordagem é que não estamos usando a opção -m , por isso não vamos atrapalhar, por exemplo, arquivos * .mov que não têm tags exif, como a maioria dos vídeos pode-se baixar da Internet (eles são simplesmente ignorados).

    
por 03.06.2013 / 23:30
1

Até onde eu sei, o exiftool não suporta escrever o formato .mov, isso pode explicar por que ele não quer criar arquivos com essa extensão, mesmo que seja apenas renomeando.

Como você precisa de alguma lógica para procurar por tags alternativas se uma delas estiver vazia, sugiro que você use exiftool apenas para extrair a informação que deseja; em seguida, renomeie seus arquivos. Aqui está um script para você começar com a idéia, não vai funcionar fora da caixa; é só para ver como isso pode ser feito:)

#!/bin/bash
# Scan the files you need
for i in *jpg *mov; do

    # Get the extension of the previous file
    extension=${i##*.}

    # Extract metadata from the file
    model=$( exiftool -f -s3 -"Model" "${i}" )
    make=$( exiftool -f -s3 -"Make" "${i}" )
    datetime=$( exiftool -f -s3 -"DateTimeOriginal" "${i}" )

    # If the datetime value is empty (returned '-' because of the '-f' option)
    # then read another tag
    if [ "${datetime}" = '-' ]; then
        datetime=$( exiftool -f -s3 -"MediaCreateDate" "${i}" )
    fi

    # Construct the new filename from the metadata gathered above
    newfilename="${datetime}-${make}-${model}.${extension}"

    # Check if the destination filename already exists, and if not,
    # create the file
    if [ ! -e "${newfilename}" ]; then
        echo mv "${i}" "${newfilename}"
    else
        echo "${i} would get renamed to ${newfilename} but that file already exists."
    fi
done
    
por 02.06.2013 / 22:10