Использует ffmpeg
и распечатывает тайм-аут в считанные секунды:
times=()
for f in *.ts; do
_t=$(ffmpeg -i "$f" 2>&1 | grep "Duration" | grep -o " [0-9:.]*, " | head -n1 | tr ',' ' ' | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
times+=("$_t")
done
echo "${times[@]}" | sed 's/ /+/g' | bc
Explanation:
for f в *.ts; do
iterates каждый из файлов, заканчивающийся на ".ts"
ffmpeg -i "$f" 2>&1
перенаправляет вывод на stderr
grep "Duration" | grep -o" [0-9:. ]*, " голова | -n1 | tr '," ' '
] изолирует время
awk -F: '{ вывод ($1 * 3600) + ($2 * 60) + $3 }'
Преобразует время в секунды
times+=("$_t")
добавляет секунды к массиву
echo "${times[@]}". | sed 's/ /+/g' | bc
расширяет каждый из аргументов и заменяет пробелы и передает их в bc
обычный калькулятор linux