Exclua vídeos .avi por tamanho usando o terminal Linux

2

Como posso excluir vídeos, via terminal, por duração do vídeo?

Eu tenho um ponto de corte de 30 segundos e quero excluir qualquer coisa abaixo disso. Se eu selecionar por tamanho ( find . -type f -size +27818098c ), isso não me dará resultados precisos, já que os vídeos são diferentes bitrates.

    
por Dara Javaherian 24.01.2015 / 16:13

1 resposta

2

Um pouco hacky, mas:

for f in *.avi; do 
  echo "Testing $f"
  ffmpeg -i "$f" 2>&1 | awk '/Duration/ { split($2,a,":"); exit a[1]*3600+a[2]*60+a[3] < 30 ? 3 : O }'
  [[ $? -eq 3 ]] && rm -i -- "$f"
done

Isso pressupõe que você tenha ffmpeg instalado. rm perguntará antes de remover um arquivo, mas você poderá remover o -i se tiver certeza de que faz o que deseja.

Um script em Ruby portátil que não pede confirmação - mas você pode substituir f.delete por puts f para verificar o que ele faria:

ruby <<"EOF"
  Dir.glob("*.avi").each { |f| 
    ff = %x( ffmpeg -i "#{f}" 2>&1 )
    d = ff.match(/Duration: ([0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{2})/)[1].split(":").map{|s| s.to_i}
    s = (d[0]*60*60 + d[1]*60 + d[2])
    f.delete if s < 30 
  }
EOF
    
por 24.01.2015 / 18:03