如何在 centOS 6 中为 ffmpeg 设置一个 cron 作业

How to set up a cron job for ffmpeg in centOS 6

我可以在 centOS6 环境下使用以下命令将 mp4 文件手动转换为 jpg 文件。

现在,谁能帮我设置一个 cron 来自动转换目录中的任何 mp4 文件 将与 mp4 文件同名的 jpg 文件如 03052022_5a9d28723d2da.jpg 用于以下环境?

OS:centos-6 (x86_64)

ffmpeg 版本 2.2.2

Plesk 17.0.17

[root@server-xxxxxxxx-x ~]# ffmpeg -i                                \
  /var/www/vhosts/xxxxx.com/httpdocs/save/03052022_5a9d28723d2da.mp4 \
  /var/www/vhosts/xxxxx.com/httpdocs/save/03052022_5a9d28723d2da.jpg

与's/.conf$/.jpg/p':

[root@server-xxxxxx-x ~]# for i in `find /var/www/vhosts/xxxxxx.com/httpdocs/save/ -type f -name "*.mp4"`; do ffmpeg -i $i `echo $i | sed -En 's/.conf$/.jpg/p'`; done

ffmpeg 版本 2.2.2 版权所有 (c) 2000-2014 FFmpeg 开发者 构建于 2018 年 2 月 21 日 03:03:24,使用 gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-18) 配置: libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libav格式 55. 33.100 / 55. 33.100 libavdevice 55. 10.100 / 55. 10.100 libavfilter 4. 2.100 / 4. 2.100 libswscale 2. 5.102 / 2. 5.102 libswresample 0. 18.100 / 0. 18.100 输入 #0, mov,mp4,m4a,3gp,3g2,mj2,来自 '/var/www/vhosts/xxxxxx.com/httpdocs/save/03081956_5aa116c836015.mp4': 元数据: major_brand:mp42 minor_version:0 compatible_brands: isommp42 creation_time : 2018-02-14 04:42:34 持续时间:00:00:00.83,开始:0.000000,比特率:23270 kb/s 流 #0:0(eng):视频:h264(基线)(avc1 / 0x31637661)、yuvj420p(pc、smpte170m)、1920x1080、25370 kb/s、SAR 65536:65536 DAR 16:9、 29.73 fps、30 tbr、90k tbn、180k tbc(默认) 元数据: 旋转:90 creation_time : 2018-02-14 04:42:34 handler_name:视频句柄 流 #0:1(eng):音频:aac (mp4a / 0x6134706D),48000 Hz,立体声,fltp,96 kb/s(默认) 元数据: creation_time : 2018-02-14 04:42:34 handler_name:声音处理 必须至少指定一个输出文件 转换失败!

与"s/.conf$/.jpg/p":

[root@server-xxxxxxx-x ~]# for i in `find /var/www/vhosts/xxxxxx.com/httpdocs/save/ -type f -name "*.mp4"`; do ffmpeg -i $i `echo $i | sed -En "s/.conf$/.jpg/p"`; done

ffmpeg 版本 2.2.2 版权所有 (c) 2000-2014 FFmpeg 开发者 构建于 2018 年 2 月 21 日 03:03:24,使用 gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-18) 配置: libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libav格式 55. 33.100 / 55. 33.100 libavdevice 55. 10.100 / 55. 10.100 libavfilter 4. 2.100 / 4. 2.100 libswscale 2. 5.102 / 2. 5.102 libswresample 0. 18.100 / 0. 18.100 输入 #0, mov,mp4,m4a,3gp,3g2,mj2,来自 '/var/www/vhosts/xxxxxx.com/httpdocs/save/03081956_5aa116c836015.mp4': 元数据: major_brand:mp42 minor_version:0 compatible_brands: isommp42 creation_time : 2018-02-14 04:42:34 持续时间:00:00:00.83,开始:0.000000,比特率:23270 kb/s 流 #0:0(eng):视频:h264(基线)(avc1 / 0x31637661)、yuvj420p(pc、smpte170m)、1920x1080、25370 kb/s、SAR 65536:65536 DAR 16:9、 29.73 fps、30 tbr、90k tbn、180k tbc(默认) 元数据: 旋转:90 creation_time : 2018-02-14 04:42:34 handler_name:视频句柄 流 #0:1(eng):音频:aac (mp4a / 0x6134706D),48000 Hz,立体声,fltp,96 kb/s(默认) 元数据: creation_time : 2018-02-14 04:42:34 handler_name:声音处理 必须至少指定一个输出文件 转换失败!

和"s/.mp4$/.jpg/p"

[root@server-xxxxx-x ~]# for i in `find /var/www/vhosts/xxxxxx.com/httpdocs/save/ -type f -name "*.mp4"`; do ffmpeg -i $i `echo $i | sed -En "s/.mp4$/.jpg/p"`; done

[image2 @ 0x2c488e0] 无法从模式“/var/www/vhosts/xxxxxx.com/httpdocs/save/03100013_5aa2a49bb67bc.jpg' 中获取第 2 帧文件名(设置 updatefirst 或在文件名模式中使用类似 %03d 的模式) av_interleaved_write_frame(): 无效参数 frame= 2 fps=0.0 q=3.2 Lsize=N/A time=00:00:00.06 bitrate=N/A video:289kB audio:0kB subtitle:0 data:0 全局 headers:0kB 多路复用开销 -100.007446% 转换失败!

这是将上述目录中的所有 .mp4 转换为 .jpg 的命令:

# for i in `find /var/www/vhosts/xxxxx.com/httpdocs/save/ -type f -name "*.mp4"`; do ffmpeg -i $i `echo $i | sed -En 's/.conf$/.jpg/p'`; done

如果要在转换后删除源.mp4文件,按如下展开:

# for i in `find /var/www/vhosts/xxxxx.com/httpdocs/save/ -type f -name "*.mp4"`; do ffmpeg -i $i `echo $i | sed -En 's/.conf$/.jpg/p'`; rm -f $i; done

您可以将此命令安排为常规 cron 作业或通过 Plesk 中的工具与设置 > 计划任务 > 添加任务。 我刚才执行了同样复杂度的命令字符串,按预期运行: