我有一个web应用程序,可以将任何视频转换为GIF动画。该应用程序在PHP中运行,以下步骤通过PHP的shell_exec执行:
- 缩放视频到较小的尺寸,如果他们是大的(ffmpeg -i $in -s 200x150 -an $out)
- 使用ffmpeg每x秒提取1个jpeg (ffmpeg -i $in -ss $ss -vframes 1 $out)
-
使用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空间贪婪正交二分划由包容-排除技巧辅助的最小化。对于速度,不做最近邻搜索。略更好的性能可以由更复杂的预期但更昂贵的版本。