【发布时间】:2015-02-18 22:45:57
【问题描述】:
我有以下脚本(名为 vid2gif.sh)将视频文件转换为 gif:
#! /bin/bash
ffmpeg -i $1 /tmp/gif/out%04d.gif
gifsicle --delay=10 --loop /tmp/gif/*.gif > $2
我可以使用命令转换文件:
vid2gif.sh myvid.mp4 myvid.gif
如何才能转换文件夹中的所有 mp4 文件?也就是说,我怎样才能使以下命令起作用:
vid2gif.sh *.mp4
脚本应将文件输出为 *.gif。谢谢你的帮助。
【问题讨论】:
-
仅供参考,对可执行脚本使用
.sh扩展名(与打算使用source调用的 shell 库相反)是错误的形式——可执行脚本定义命令,而 UNIX 命令没有扩展——它们本质上与语言无关,因为顶部的 shebang 行定义了它们的解释方式。请参阅talisman.org/~erlkonig/documents/… 进行更长时间的讨论。 -
(另外,以
#!/bin/bash开头的脚本是bash 脚本,而不是POSIX sh 脚本,因此使用.sh扩展名会产生误导;如果使用@987654329 运行,许多此类脚本会以令人惊讶的方式中断@,扩展名意味着支持)。 -
感谢您的解释。所以我应该将此脚本保存为 vid2gif,将其移动到 /usr/local/bin 文件夹并以“vid2gif”的形式运行。对吗?
-
...并使用
chmod +x将其标记为可执行,是的。如果您不想为所有用户安装它,而只为您自己安装,您可以考虑创建一个$HOME/bin目录并将其添加到您的PATH。 -
标题现在的写法——循环遍历文件,而不是参数——更笼统一些,所以我修改了答案的第 (1) 部分以适应。