Exibir e somar o tempo de arquivos de vídeo e som

Considere que você tenha vários arquivos de vídeo ou de som distribuídos em diversas pastas localizadas em um mesmo diretório. Como fazer para saber quanto tempo tem cada arquivo? O script "exibe_tempo.sh" abaixo facilita esse trabalho. Ele lista todos esses arquivos e verifica a duração de cada um através do comando "avconv", imprimindo os resultados na tela.

#!/bin/bash
## Script para exibir tempo dos vídeos de vários subdiretórios

extensao='MP4'
caminho='/path/videos'

cd $caminho
# Encontrar todos os arquivos com extensão informada no diretório informado e ordenar por nome
lista=$(find . -maxdepth 2 -name "*.$extensao" | sort)

for arq in $lista; do
	# Obter informação da duração do arquivo em HH:MM:SS.centésimos
	tempo=$(avconv -i $arq 2>&1 | grep "Duration"| cut -d ' ' -f 4 | sed s/,//)
	# Imprimir nome do arquivo e duração
	echo $arq "-" $tempo
done

Para somar o tempo de vários arquivos, pode ser feita uma adaptação no script acima para guardar em um vetor os tempos dos arquivos de uma mesma pasta. Esse vetor servirá de entrada para o script abaixo (soma_tempo.sh), que deverá somar o tempo de cada componente do vetor, informado em HH:MM:SS.

#!/bin/bash
## Script para somar os tempos de um vetor

EPOCH='jan 1 1970'
sum=0

vetor_tempo=(00:00:34 00:00:35 00:01:32)

LIMITE=`echo ${vetor_tempo[*]} | wc -w`
for ((i=0; i <= $LIMITE-1 ; i++)); do
	sum="$(date -u -d "$EPOCH ${vetor_tempo[$i]}" +%s) + $sum"
done
tempo_segundos=$(echo $sum|bc)
echo $tempo_segundos
date -d@$tempo_segundos -u +%H:%M:%S

A saída na tela será do total de segundos e o valor convertido em HH:MM:SS. Esse script é útil também para somar as horas trabalhadas em um mês, por exemplo.

Compartilhe o link desse texto, mas se for copiar algum trecho, cite a fonte. Valorize nosso trabalho.
Mais informações na licença de uso do site.