batch modifica os arquivos de vídeo preservando a data de criação em novos arquivos

1

Eu criei um script para reduzir o tamanho de vídeos .mov e .mp4 com o avconv e pular vídeos já compactados (pela presença de strings). No script, eu coloquei a data do vídeo no nome, mas eu preferiria preservar a data original do vídeo no arquivo reduzido como um atributo, o que obviamente não é implementado no script. É possível no console do Linux?

#! /bin/bash
shopt -s globstar || exit
for f in **
do
  if [[ "$f" =~ \.mp4$ ]] || [[ "$f" =~ \.mov$ ]] || [[ "$f" =~ \.MOV$ ]] ; then
    if [[ "$f" =~ reduced.*\.mp4$ ]] || [[ "$f" =~ compressed.*\.mp4$ ]]; then
    echo "already compressed"
    else
      if yes |      avconv -i "$f" -c:v libx264 -crf 24 -c:a aac -strict -2 "${f%.*}_$(date -d@$(stat --printf='%Y' "$f") +%Y%m%d)"_compressed.mp4; then
      rm -Rf "$f"
      else
      rm -Rf "${f%.*}_$(date -d@$(stat --printf='%Y' "$f") +%Y%m%d)"_compressed.mp4
      echo "Command failed"
      fi
    fi
  fi
done
    
por Ferroao 05.12.2017 / 23:20

1 resposta

2

Sim, você pode fazer isso usando touch :

else
  t="${f%.*}_$(date -d@$(stat --printf='%Y' "$f") +%Y%m%d)"_compressed.mp4
  if yes |      avconv -i "$f" -c:v libx264 -crf 24 -c:a aac -strict -2 "$t"; then
    touch -r "$f" "$t"
    rm -f "$f"
  else
    rm -f "$t"
    echo "Command failed"
  fi
fi

A opção -r informa touch para usar o arquivo fornecido como referência para os horários a serem aplicados ao arquivo de destino.

    
por 05.12.2017 / 23:38