Не знаю, как это описать, но хочу упростить это ...
declare -i seconds=0
seconds=$(mediainfo --Inform="General;%Duration%" "$1")/1000
eval "echo $(date -ud "@$seconds" +'%l:%M')"
Я не мог разделить возвращаемое мс на 1000, не объявив его первым, но могу ли я каким-то образом получить две первые строки в виде «@ $ секунд»?
Вы не показали целый сценарий, но я предполагаю, что Вам действительно не нужно eval
и echo
в последней строке. Можно использовать a bash
Арифметическое выражение $((…))
следующим образом:
date -ud "@$(($(mediainfo --Inform="General;%Duration%" "$1")/1000))" +%l:%M
Поскольку %l
“час, дополненное пространство (1.. 12)” %l:%M
дает неправильный вывод, для фильма с 00:56:40
это показывает 12:56
. Возможно, Вы хотите что-то другое, но я никогда не видел 12-часовой формат, используемый на продолжительности – если отображение продолжительности файла в формате HH:MM с дополненными пространством часами - то, что Вы хотите +%_H:%M
добивается цели:
$ date -ud@"$(($(mediainfo --Inform="General;%Duration%" /path/to/file)/1000))" +%_H:%M
0:56