【问题标题】:Running FFMPEG from Shell Script /bin/sh从 Shell 脚本 /bin/sh 运行 FFMPEG
【发布时间】:2013-01-29 18:13:51
【问题描述】:

我正在尝试设置一个 Shell 脚本以在自动机监视文件夹中工作...

除了 Run Shell Scrip 部分外,一切正常...

基本上,当文件出现在监视文件夹中时,它会运行调用 FFMPEG 的 shell 脚本,然后将文件移动到存档文件夹以进行安全保存。但是现在自动机告诉我一切正常,但现在正在创建文件。

我将 Shell 设置为 /bin/sh 并将输入设置为参数

这是我的脚本:

for f in "$@"
do
name=$(basename "$f")
dir=$(dirname "$f")
ffmpeg -i "$f" -b 250k -strict experimental -deinterlace -vcodec h264 -acodec aac "$dir/mp4/${name%.*}.mp4"
echo "$dir/mp4/${name%.*}.mp4"
done

它确实回显了正确的文件名,但实际上并没有运行 ffmpeg

我已经尝试在它之前添加-exec,就像我在一些脚本中看到的那样,但仍然没有...

【问题讨论】:

  • 脚本是否向标准错误输出任何内容?
  • 不确定如何使用stderr,但是当我将它添加到代码末尾时,在回显之后...它告诉我第4行:找不到ffmpeg命令
  • 它在我的终端中运行良好只是无法弄清楚为什么它不能在这个 shell 脚本中工作
  • 题外话,但您的 ffmpeg 命令可以改进。 ffmpeg 命令行使用问题更适合Super User(因为 SO 是特定于编程的)。我建议在 SU 上问一个“如何改进这个命令以进行网络播放”的问题。
  • 感谢您的信息...我从没想过要问...在使用 stderr 后它也可以正常工作,这导致我需要 ffmpeg 的绝对路径

标签: shell ffmpeg sh


【解决方案1】:

FFmpeg 在运行时搜索 STDIN。这是为了允许用户点击q 来停止编码,以及其他任务。这可能会导致脚本出现问题。也许解决方法试试这个:

# notice --+
#          |
#          v
ffmpeg -nostdin -i "$f" -b 250k -strict experimental -deinterlace \
  -vcodec h264 -acodec aac "$dir/mp4/${name%.*}.mp4"

mysterious error with ffmpeg on OSX

【讨论】:

  • 很确定它是最新版本...ffmpeg 版本 1.1.2 版权所有 (c) 2000-2013 FFmpeg 开发人员于 2013 年 2 月 6 日 10:44:49 使用 gcc 4.2.1 (GCC ) (Apple Inc. build 5666) (dot 3)
【解决方案2】:

不确定是不是因为我在 Mac OS X 服务器上运行,但我想是的,我必须包含 ffmpeg 的绝对路径...修复了它

for f in "$@"
do
name=$(basename "$f")
dir=$(dirname "$f")
/opt/local/bin/ffmpeg -i "$f" -b 250k -strict experimental -deinterlace -vcodec h264 -acodec aac "$dir/mp4/${name%.*}.mp4"
echo "$dir/mp4/${name%.*}.mp4"
done

【讨论】: