是否可以为目录设置 ffmpeg cron 作业?

是否可以为目录设置 ffmpeg cron 作业?

我需要一种自动将 gif 文件转换为 mp4 的方法。并设置一个目录并每 5 分钟检查一次新文件。我想使用 ffmpeg 进行隐藏并删除 gif 之后。

ffmpeg -f gif -i cat.gif cat.mp4

这很难做到吗?

答案1

它应该是简单的;创建一个执行该工作的 shell 脚本(例如ffmpegcron.sh):

#!/bin/sh
for i in /path/to/gifs/*.gif
do
    [ -f "$i" ] || continue
    ffmpeg -f gif -i "$i" "${i%.gif}.mp4" &&
        rm -f "$i"
done

然后使用 使脚本可执行chmod +rx ffmpegcron.sh,并使用crontab -e创建 cron 作业,其应如下所示:

*/5 * * * * /path/to/ffmpegcron.sh

然后cron每 5 分钟运行一次脚本。

答案2

我不会在这里使用基于时间的解决方案,并强烈提倡 phg 对这个问题的评论中的方法。

虽然可能性可能不高,但很有可能在 GIF 尚未完全写入之前使用 cron 开始转换,无论它来自何处。

#! /bin/bash
inotifywait -m -e close_write /path/to/dir | while read line
do
    if [[ "${line,,}" =~ ".gif" ]] ; then
      file=$(echo "$line"|awk 'BEGIN{FS=" CLOSE_WRITE,CLOSE "}{printf "%s%s",$1, $NF}')
      ffmpeg -f gif -i "$file" "${file%.*}.mp4" &&
          rm -f "$file"
    fi;
done

相关内容