我正在使用自动器创建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
我了解这是自动化器枚举所有接收到的文件的方式。文件将作为参数接收。
我将最后一行更改为
total="${times[@]}" | sed 's/ /+/g' | bc
创建一个名为total
的变量,该变量可以保存所有视频的总秒数。
现在,我需要将此变量传递到下一步,并将其显示在对话框中。
两个问题:
谢谢
答案 0 :(得分:2)
是的,将shell脚本中的for
循环从以下位置更改:
for f in *.mov; do
到
for f in "$@"; do
是正确的。 $@
是传递给Shell脚本的所有参数,在您的方案中,这些参数将是每个选定电影文件的路径名。
现在我需要将此变量传递到下一步,并在对话框中显示
要实现这一目标,您需要:
echo
total
。因此,将第二个示例Shell脚本的最后一行更改为以下内容:
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
echo "${times[@]}" | sed 's/ /+/g' | bc # <-- change last line to this
Automator中的下一步在您当前的Run AppleScript
动作之后添加一个Run Shell Script
动作。要在 Automator 中找到Run AppleScript
操作,您可以:
在左侧面板/列的顶部选择Library
:
在搜索字段中键入:运行AppleScript 并将Run AppleScript
动作拖到当前Run Shell Script
动作下方的画布区域。
在新添加的Run AppleScript
操作中输入以下AppleScript:
on run {totalDuration}
set dialogText to (totalDuration as text) & " seconds"
tell application "Finder" to display dialog dialogText with title ¬
"Total Duration" buttons {"OK"} default button 1 with icon 1
end run
您的Automator Service /工作流的完整画布区域现在应显示为以下内容:
注意:
我当前正在使用的Mac上没有ffmpeg
实用程序,因此上面屏幕截图中显示的shell脚本使用内置的mdls
实用程序来获取而是每次移动的持续时间。
这是代码:
total_duration=0
for f in "$@"; do
duration=$(mdls -name kMDItemDurationSeconds -raw -nullMarker 0 "$f")
total_duration=$(echo "$total_duration" + "$duration" | bc)
done
echo "$total_duration"
该屏幕截图中的另一个次要区别是Run AppleScript
操作中显示的代码。这只是进行一些舍入,对于您要使用的Shell脚本,这可能是不必要的。可以使用上述第3点中显示的AppleScript。