Я использую Automator для создания службы Finder, чтобы получить длину всех выбранных видео и отобразить в диалоговом окне.
Итак, сервис будет работать так:
- Я выбираю кучу видео
- Я щелкаю правой кнопкой мыши и запускаю сервис.
Я нашел этот скрипт Bash в сети, который отлично работает.
times=()
for f in *.mov; 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
Я пытаюсь приспособить это для автоматизатора. Итак, мой сервис до сих пор равен этому:
У меня есть первый шаг, который получает файлы фильмов из Finder и переходит к этому Run Shell Script
times=()
for f in "$@"; 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
total="${times[@]}" | sed 's/ /+/g' | bc
Я был вынужден изменить цикл for
на этот
for f in "$@"; do
Я так понимаю, что automator перечисляет все полученные файлы. Файлы принимаются в качестве аргументов.
Я изменил последнюю строку на
total="${times[@]}" | sed 's/ /+/g' | bc
Чтобы создать переменную с именем total
, которая может содержать общее количество секунд всех видео.
Теперь мне нужно передать эту переменную на следующий шаг и отобразить ее в диалоговом окне.
Два вопроса:
- как мне это сделать?
- исправления, которые я исправил?
спасибо