Eu não tenho .ts aqui, mas isso funciona para .mp4 . Use ffprobe (parte de ffmpeg ) para obter o tempo em segundos, por exemplo:
ffprobe -v quiet -of csv=p=0 -show_entries format=duration Inception.mp4
275.690000
para todos os arquivos .mp4 no diretório atual:
find . -maxdepth 1 -iname '*.mp4' -exec ffprobe -v quiet -of csv=p=0 -show_entries format=duration {} \;
149.233333
130.146667
275.690000
use paste para passe a saída para bc e obtenha o tempo total em segundos:
find . -maxdepth 1 -iname '*.mp4' -exec ffprobe -v quiet -of csv=p=0 -show_entries format=duration {} \; | paste -sd+ -| bc
555.070000
Então, para .ts arquivos, você pode tentar:
find . -maxdepth 1 -iname '*.ts' -exec ffprobe -v quiet -of csv=p=0 -show_entries format=duration {} \; | paste -sd+ -| bc
Outra ferramenta que funciona para os arquivos de vídeo que tenho aqui é exiftool , por exemplo:
exiftool -S -n Inception.mp4 | grep ^Duration
Duration: 275.69
exiftool -q -p '$Duration#' Inception.mp4
275.69
Comprimento total de todos os arquivos .mp4 no diretório atual:
exiftool -S -n ./*.mp4 | awk '/^Duration/ {print $2}' | paste -sd+ -| bc
555.070000000000
exiftool -q -p '$Duration#' ./*.mp4 | awk '{sum += $0}; END{print sum}'
555.070000000000
Você também pode enviar a saída para outro comando para converter o total para DD:HH:MM:SS , veja as respostas aqui .
Ou use exiftool interno de ConvertDuration para isso (você precisa de uma versão relativamente recente):
exiftool -n -q -p '${Duration;our $sum;$_=ConvertDuration($sum+=$_)
}' ./*.mp4| tail -n1
0:09:15