【问题标题】:How to set up a cron job for ffmpeg in centOS 6如何在 centOS 6 中为 ffmpeg 设置 cron 作业
【发布时间】:2018-08-13 04:20:12
【问题描述】:

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

现在,任何人都可以帮助我如何为目录中的任何 mp4 文件设置一个 cron 以自动转换 转换成与 mp4 文件同名的 jpg 文件,例如 03052022_5a9d28723d2da.jpg 用于以下环境?

操作系统: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 开发者 使用 gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-18) 于 2018 年 2 月 21 日 03:03:24 构建 配置: libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.100 / 55. 33.100 libav 设备 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': 元数据: 主要品牌:mp42 次要版本:0 compatible_brands:isomp42 创建时间: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 创建时间:2018-02-14 04:42:34 handler_name : 视频句柄 流 #0:1(eng):音频:aac (mp4a / 0x6134706D),48000 Hz,立体声,fltp,96 kb/s(默认) 元数据: 创建时间: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 开发者 使用 gcc 4.4.7 (GCC) 20120313 (Red Hat 4.4.7-18) 于 2018 年 2 月 21 日 03:03:24 构建 配置: libavutil 52. 66.100 / 52. 66.100 libavcodec 55. 52.102 / 55. 52.102 libavformat 55. 33.100 / 55. 33.100 libav 设备 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': 元数据: 主要品牌:mp42 次要版本:0 compatible_brands:isomp42 创建时间: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 创建时间:2018-02-14 04:42:34 handler_name : 视频句柄 流 #0:1(eng):音频:aac (mp4a / 0x6134706D),48000 Hz,立体声,fltp,96 kb/s(默认) 元数据: 创建时间: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 或在文件名模式) av_interleaved_write_frame():参数无效 帧= 2 fps=0.0 q=3.2 Lsize=N/A 时间=00:00:00.06 比特率=N/A 视频:289kB 音频:0kB 字幕:0 数据:0 全局标题:0kB 复用开销 -100.007446% 转换失败!

【问题讨论】:

  • 使用 crontab?就像你只需要设置命令并绘制
  • 谢谢 Mike,我对 centos 上的 ffmpeg cron 作业不是很熟悉,如果您能向我展示上述案例的示例,我将不胜感激。
  • 其他都和设置crontab一样
  • 错误来自 sed 命令。您可以尝试将最后一个选项从 /P 更改为 /p 吗?
  • 感谢 OldC,所以,我使用大写字母 P 是我的错误,感谢您发现这么小的错误。我已经尝试并发布了结果。它减少了错误消息,但一直显示“必须指定至少一个输出文件”。

标签: php linux ffmpeg cron imagick


【解决方案1】:

这是将所有.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 中的工具和设置 > 计划任务 > 添加任务。 我刚才执行了同样复杂的命令字符串,它按预期工作:

【讨论】:

  • 感谢猫王,它运行的 mp4 文件与我的目录一样多,但没有在目录中创建任何 jpg 文件,并在底部说“必须指定至少一个输出文件”。我已经把它贴在上面了。
  • 我试图找出这里有什么问题。我的设置有什么问题吗?
  • Elvis,感谢您对安排任务的解释,现在,我想使用“运行 PHP 脚本”作为仅在目录中创建 mp4 文件后自动运行的 cron 作业。在这种情况下,我应该如何使用您给我的命令?我应该在 PHP 文件中使用它吗?我的意思是每次在目录中创建 mp4 文件时我都想运行该命令,而不删除其余的 mp4 文件,仅适用于新的 mp4 文件,而不适用于 *.mp4 之类的所有文件。同时我正在处理错误“必须指定至少一个输出文件”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-08
  • 2012-05-09
  • 2012-04-20
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多