segunda-feira, 8 de agosto de 2011

Sequência cronológica para jpg e mpg


   Para o mesmo caso de juntar fotos e vídeos de uma mesma viagem, é preciso colocar ordem nas suas recordações. Resumindo em 3 etapas o que este script faz, temos:
  • renomear de maiúscula para minúscula
  • mostrar a data original para cada foto e vídeo através do exiftool
  • renomear usando 2 dígitos para numerar (01.jpg, 02.jpg, ..., 10.mpg, ..., 99.jpg)
Os arquivos THM que acompanham os vídeos devem estar juntos, pois ao iniciar a gravação de vídeo, é registrado no THM a data do vídeo.    Os três primeiros for e a utilização das variáveis ano, mes, dia, hora, min, seg já foram comentados em Numerando arquivos de forma cronológica .    A variável total mais uma vez se encarrega de obter a quantidade de arquivos a minupular.    Ambos os laços for fazem o mesmo serviço, apenas para renomear os arquivos com um ou dois dígitos. Dentro do loop é verificado se o arquivo tem extensão JPG ou THM. De acordo com o arquivo fotos.txt, o if> seleciona entre as duas opções qual deve ser renomeado.

#/bin/bash

for M in *.JPG
  do
   m=$(echo $M | tr A-Z a-z)
   mv -v $M $m
  done

for M in *.THM
  do
   m=$(echo $M | tr A-Z a-z)
   mv -v $M $m
  done

for M in *.MPG
  do
   m=$(echo $M | tr A-Z a-z)
   mv -v $M $m
  done


ls -1 *.jpg *.thm | {
  while read arq; do
  ano=`exiftool "$arq" | grep Original | sed 's/://g' | sed 's/ //g' | cut -c 18-21`
  mes=`exiftool "$arq" | grep Original | sed 's/://g' | sed 's/ //g' | cut -c 22-23`
  dia=`exiftool "$arq" | grep Original | sed 's/://g' | sed 's/ //g' | cut -c 24-25`
  hora=`exiftool "$arq" | grep Original | sed 's/://g' | sed 's/ //g' | cut -c 26-27`
  min=`exiftool "$arq" | grep Original | sed 's/://g' | sed 's/ //g' | cut -c 28-29`
  seg=`exiftool "$arq" | grep Original | sed 's/://g' | sed 's/ //g' | cut -c 30-31`
  echo "$arq" $ano$mes$dia$hora$min$seg
  done
} | tee -a fotos.txt

cat fotos.txt | awk '{printf "%s %4s\n",$2,$1}' | sort -n > fotos2.txt

total=`ls *.jpg *.thm | wc -l`
echo *********************
echo Handling $total files
echo *********************
sleep 400

for i in `seq 9`
  do
  arq=`head -n $i fotos2.txt | tail -n 1 | cut -c 25-`
  if [ "$arq" = jpg ]
   then
    foto=`head -n $i fotos2.txt | tail -n 1 | cut -c 16-23`
    mv -v "$foto".jpg "0$i.jpg"
  fi
  if [ "$arq" = thm ]
   then
    video=`head -n $i fotos2.txt | tail -n 1 | cut -c 16-23`
    mv -v "$video".mpg "0$i.mpg"
  fi
  done

for i in `seq 10 1 $total`
  do
   arq=`head -n $i fotos2.txt | tail -n 1 | cut -c 25-`
   if [ "$arq" = jpg ]
    then
     foto=`head -n $i fotos2.txt | tail -n 1 | cut -c 16-23`
     mv -v "$foto".jpg "$i.jpg"
   fi
   if [ "$arq" = thm ]
    then
     video=`head -n $i fotos2.txt | tail -n 1 | cut -c 16-23`
     mv -v "$video".mpg "$i.mpg"
   fi
  done

   Script indicado para quem quer organizar rigorosamente a sequência dos acontecimentos tanto em fotos como em vídeos.    Adicionalmente, esta é uma ideia para mostrar o poder do BASH para organizar de acordo com os seus critérios.

Nenhum comentário:

Postar um comentário