如何使用PHP + shell命令优化视频到动画GIF转换


How to optimize video to animated GIF conversion using PHP + shell commands

我有一个web应用程序,可以将任何视频转换为GIF动画。该应用程序在PHP中运行,以下步骤通过PHP的shell_exec执行:

  1. 缩放视频到较小的尺寸,如果他们是大的(ffmpeg -i $in -s 200x150 -an $out)
  2. 使用ffmpeg每x秒提取1个jpeg (ffmpeg -i $in -ss $ss -vframes 1 $out)
  3. 使用imagick (Convert -delay $delay -loop 0 $dir/* $out)将jpeg转换为GIF动画

    aside -我不使用ffmpeg gif89a输出的原因是质量很差。

我希望能够除除任何主要的图像格式,但最常见的可能是。flv (flash)和。avi/.mpg。

我的应用程序运行良好,但我是一个完美主义者,它需要更快的可扩展性。

我的web服务器有16个内核,我想尽可能多地利用它们,但是。flv多线程似乎不支持ffmpeg,而。avi和其他一些支持。此外,ffmpeg在输出到jpeg时不支持多线程。

有谁知道其他支持。flv和其他多线程的程序吗?有没有更有效的方法从视频中创建GIF动画,同时保持相对体面的质量(又不是ffmpeg支持的100色调色板)?

此外,如果有人知道哪种编解码器可能在阶段1和2中表现最好,特别是与flv,我很想知道。我已经做了几个小时的测试,但是选择太多了,我还没有得出任何可靠的结论。

***更新:我的在线应用程序工作得很好,到目前为止动画gif生成器。我还是想让它更快,所以如果有人遇到类似的情况……让我知道!

可以直接转换为AFAIK

ffmpeg -i [input_video] output.gif

虽然你可能应该添加额外的用户参数与相同的默认帧速率,大小等…(否则输出将是巨大的),并进一步优化图像,你可以使用gifsicle

编辑:好的,同意ffmpeg的gif编码可以使用改进-它可以从添加量化器中获益最多,如:

http://www.ece.mcmaster.ca/xwu/cq.c

算法:方差的RGB空间贪婪正交二分划由包容-排除技巧辅助的最小化。对于速度,不做最近邻搜索。略更好的性能可以由更复杂的预期但更昂贵的版本。