You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排查Automator中运行FFMPEG提取视频帧Shell脚本的报错问题

Automator中Shell脚本执行失败的解决方法

问题背景

脚本在终端可正常从指定视频每隔60秒提取一帧图像,但在Automator的「Run Shell Script」动作中报错“Run Shell Script动作发生错误”,已确认目录、文件名正确且Automator拥有完整文件访问权限。

核心原因及解决步骤

1. Shell环境变量差异

Automator的默认PATH环境变量与终端不同,导致无法找到ffmpeg命令。

  • 解决:在终端执行which ffmpeg获取ffmpeg的绝对路径(例如/opt/homebrew/bin/ffmpeg或/usr/local/bin/ffmpeg),在脚本中用该绝对路径替换直接调用的ffmpeg。

2. 命令行参数传递逻辑不匹配

原脚本依赖-v/-i参数接收输入,但Automator的「Run Shell Script」动作默认不会以这种方式传递参数,需适配Automator的输入模式。

  • 解决:修改脚本,让它直接接收Automator传递的文件路径作为自变量,而非通过getopts解析参数。

3. 工作目录验证(可选)

Automator默认工作目录可能不是脚本中指定的输入目录,确保所有路径都使用绝对路径(原脚本已实现,但可再次确认路径正确性)。

适配Automator的修改后脚本

#!/bin/bash

# 替换为你在终端执行which ffmpeg得到的绝对路径
FFMPEG_PATH="/opt/homebrew/bin/ffmpeg"

# 默认提取间隔(秒)
DEFAULT_INTERVAL=60

# 检查是否收到Automator传递的视频文件
if [ $# -eq 0 ]; then
    echo "错误:未接收到视频文件输入"
    exit 1
fi

# 第一个自变量是视频文件路径
VIDEO_PATH="$1"
# 第二个自变量是自定义间隔,未指定则用默认值
INTERVAL="${2:-$DEFAULT_INTERVAL}"

# 输出目录,保持原路径
OUTPUT_DIR="/Users/river/Content/FFMPEG/FFMPEG Out"

# 创建视频专属输出子目录
BASE_NAME=$(basename "$VIDEO_PATH" | sed 's/\.[^.]*$//')
VIDEO_OUTPUT_DIR="$OUTPUT_DIR/$BASE_NAME"
mkdir -p "$VIDEO_OUTPUT_DIR"

# 执行ffmpeg命令生成缩略图
"$FFMPEG_PATH" -i "$VIDEO_PATH" -vf "fps=1/$INTERVAL,scale=iw:ih" "$VIDEO_OUTPUT_DIR/thumb%04d.png"

echo "缩略图已保存至:$VIDEO_OUTPUT_DIR"
echo "缩略图生成完成"

Automator动作设置

  1. 打开Automator,新建「快速操作」或「应用程序」;
  2. 添加「Run Shell Script」动作;
  3. 在动作的「传递输入」下拉菜单中选择「作为自变量」;
  4. 将上述修改后的脚本粘贴到文本框中;
  5. 若为「快速操作」,可设置「工作流程收到当前」为「视频文件」,指定在「访达」中运行。

内容的提问来源于stack exchange,提问作者River Side

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 04:40:15