Você pode usar o script a seguir para saber Duração total de todos os arquivos de vídeo em um diretório recursivamente . Eu usei avprobe
no seguinte script que vem com libav-tools
Instale libav-tools
como,
sudo apt-get install libav-tools
Salve o script como get_video_duration.sh
(digamos). Dê permissão de execução a partir de um terminal como
chmod u+x get_video_duration.sh
Como executar o script
Para saber a duração total do vídeo do diretório /full/path/to/videodir
, execute com argumento como
./get_video_duration.sh /full/path/to/videodir
Ou para saber a duração total do vídeo do diretório atual, sem nenhum argumento,
./get_video_duration.sh .
Para recursão acrescente -R
ou -r
ou -recursive
ou --recursive
após o caminho do diretório. Por exemplo, para saber a duração total do vídeo do diretório /full/path/to/videodir
recursivamente (também procure todas as pastas dentro de /full/path/to/videodir
)
./get_video_duration.sh /full/path/to/videodir -R
O script é o seguinte:
#!/bin/bash
mysep="======================================================================================"
mysmallsep="--------------------------------------------------------------------------------------"
if [ -n "" ];then
mypath=""
else
mypath="$(pwd)"
fi
declare -a my_path_array
get_duration(){
/usr/bin/avprobe "" 2>&1 | grep Duration | awk -F[:,] '{print int(*3600+*60+)}'
}
print_duration(){
awk -v var="" 'BEGIN {print int(var/3600)"Hr "int((var%3600)/60)"Min "int(var%60)"Sec "}'
}
execute_it_now(){
echo -e "Video File\t\tVideo Duration"
echo $mysep
echo ""
echo $mysmallsep
j=0
for i in ""/{*.mp4,*.mkv,*.avi,*.flv} ## Put the existing video file extension you have
do
if [[ "$(get_duration "$i")" -ne "0" ]];then
echo -e "$(basename "$i")\t$(tput setaf 2)$(print_duration $(get_duration "$i"))$(tput sgr0)"
fi
let j=j+$(get_duration "$i") 2>/dev/null
done
echo $mysep
echo "Total Duration $(tput setaf 1)$(print_duration $j)$(tput sgr0)"
}
execute_these_now(){
for i in ""/{*.mp4,*.mkv,*.avi,*.flv} ## Put the existing video file extension you have
do
if [[ "$(get_duration "$i")" -ne "0" ]];then
echo -e "$(basename "$i")\t$(tput setaf 2)$(print_duration $(get_duration "$i"))$(tput sgr0)"
fi
done
}
add_these_now(){
j=0;
for i in ""/{*.mp4,*.mkv,*.avi,*.flv} ## Put the existing video file extension you have
do
let j=j+$(get_duration "$i") 2>/dev/null
done
echo $j
}
case "" in
-R|-r|-recursive|--recursive)
tmp=$(find $mypath -type d | xargs)
my_path_array=( $tmp )
echo -e "Video File\t\tVideo Duration"
echo $mysep
k=0;
for indx in $(seq ${#my_path_array[@]})
do
echo ${my_path_array[$(($indx-1))]}
echo $mysmallsep
execute_these_now ${my_path_array[$(($indx-1))]}
let k=k+$(add_these_now ${my_path_array[$(($indx-1))]})
done
echo $mysep
echo "Total Duration $(tput setaf 1)$(print_duration $k)$(tput sgr0)"
;;
*)
execute_it_now $mypath
;;
esac
Captura de tela da execução do script
Observação: Como não tenho nenhum arquivo .mkv
ou .avi
no meu diretório home, as duas últimas linhas da captura de tela apareceram com duração 0Hr 0Min 0Sec