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