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

Php 如何在centOS 6中为ffmpeg设置cron作业,php,linux,ffmpeg,cron,imagick,Php,Linux,Ffmpeg,Cron,Imagick,在centOS 6环境下,我可以使用下面的命令手动将mp4文件逐个转换为jpg文件 现在,有谁能帮我设置一个cron来自动转换目录中的任何mp4文件吗 对于以下环境,是否使用与mp4文件名相同的jpg文件,例如03052022_5a9d28723d2da.jpg 操作系统:centos-6(x86_64) ffmpeg版本2.2.2 普莱斯克17.0.17 [root@server-xxxxxxxx-x ~]# ffmpeg -i \

在centOS 6环境下,我可以使用下面的命令手动将mp4文件逐个转换为jpg文件

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

操作系统:centos-6(x86_64)

ffmpeg版本2.2.2

普莱斯克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,通用条款4.4.7(通用条款)20120313(红帽4.4.7-18) 配置: libavutil 52。66.100 / 52. 66.100 libavcodec55。52.102 / 55. 52.102 libav55格式。33.100 / 55. 33.100 libav55设备。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 从“/var/www/vhosts/xxxxxx.com/httpdocs/save/03081956_5aa116c836015.mp4”输入#0、mov、mp4、m4a、3gp、3g2、mj2: 元数据: 主要品牌:mp42 次要版本:0 兼容品牌:isommp42 创建时间:2018-02-1404:42:34 持续时间:00:00:00.83,开始时间:0.000000,比特率:23270 kb/s 流#0:0(英文):视频: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 创建时间:2018-02-1404:42:34 处理程序名称:VideoHandle 流#0:1(英语):音频:aac(mp4a/0x6134706D),48000 Hz,立体声,fltp,96 kb/s(默认) 元数据: 创建时间:2018-02-1404:42:34 处理程序名称:SoundHandle 必须至少指定一个输出文件 转换失败

使用“s/.conf$/.jpg/p”:

ffmpeg版本2.2.2版权所有(c)2000-2014 ffmpeg开发者 建造于2018年2月21日03:03:24,通用条款4.4.7(通用条款)20120313(红帽4.4.7-18) 配置: libavutil 52。66.100 / 52. 66.100 libavcodec55。52.102 / 55. 52.102 libav55格式。33.100 / 55. 33.100 libav55设备。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 从“/var/www/vhosts/xxxxxx.com/httpdocs/save/03081956_5aa116c836015.mp4”输入#0、mov、mp4、m4a、3gp、3g2、mj2: 元数据: 主要品牌:mp42 次要版本:0 兼容品牌:isommp42 创建时间:2018-02-1404:42:34 持续时间:00:00:00.83,开始时间:0.000000,比特率:23270 kb/s 流#0:0(英文):视频: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 创建时间:2018-02-1404:42:34 处理程序名称:VideoHandle 流#0:1(英语):音频:aac(mp4a/0x6134706D),48000 Hz,立体声,fltp,96 kb/s(默认) 元数据: 创建时间:2018-02-1404:42:34 处理程序名称:SoundHandle 必须至少指定一个输出文件 转换失败

带“s/.mp4$/.jpg/p”

[image2@0x2c488e0]无法从模式'/var/www/vhosts/xxxxxx.com/httpdocs/save/03100013_5aa2a49bb67bc.jpg'获取帧文件名编号2'(在文件名模式中设置updatefirst或使用类似%03d的模式) av_交错_写入_帧():参数无效 帧=2 fps=0.0 q=3.2 Lsize=N/A时间=00:00:00.06比特率=N/A 视频:289kB音频:0kB字幕:0数据:0全局标题: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中的工具和设置>计划任务>添加任务
我刚刚执行了同样复杂的命令字符串,它的工作原理与预期的一样:

使用crontab?就像你只需要设置命令和drewThanks Mike一样,我对centos上的ffmpeg cron作业不太熟悉,如果你能给我举一个例子,我将不胜感激。这与设置crontab的其他功能相同错误来自sed命令。你能试着把最后一个选项从/P改为/P吗?谢谢OldC,所以,使用大写的P是我的错误,我很感激你能发现这样一个小小的错误。我已经试过并公布了结果。它减少了错误消息,但始终显示“必须指定至少一个输出文件”。感谢Elvis,它运行的mp4文件与我在目录中的mp4文件一样多,但没有在目录中创建任何jpg文件,在底部显示“必须指定至少一个输出文件”。我把它贴在上面了。我正在努力找出这里出了什么问题。我对设置做了什么错误吗?Elvis,谢谢你关于安排任务的解释,现在,我想使用“运行PHP脚本”作为cron作业,只有在目录中创建mp4文件后才会自动运行。在这种情况下,我应该如何使用你给我的命令?我应该在PHP文件中使用它吗?我的意思是,我希望每次在目录中创建mp4文件时都运行该命令,而不删除其余的mp4文件,仅针对新的mp4文件,而不是针对所有类似*.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'`; done
# 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