【发布时间】:2016-09-30 05:19:38
【问题描述】:
我正在使用 ffmpeg 将高质量视频转换为 gif,大多数视频都是 60fps 及以上720p,但是当我使用下面的代码将视频转换为 gif 时,我得到的 gif fps 非常低输出,
#!/usr/bin/env
palette=/tmp/pallete.png
filter="fps=50,scale=480:-1:flags=lanczos"
ffmpeg -y -i test.mov -vf $filter,palettegen=stats_mode=diff $palette
ffmpeg -y -i test.mov -i $palette -lavfi "$filter [x]; [x][1:v] paletteuse" test.gif
我注意到的另一个问题是 - 随着宽度的增加,例如 720 而不是 480 我得到的 fps 甚至更低。
这里是输出日志示例,输出fps低于分配的50fps
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/tmp/201631203815.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.36.100
Duration: 00:00:05.48, start: 0.016000, bitrate: 1579 kb/s
Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 1334x1334, 1576 kb/s, 60.18 fps, 60 tbr, 1000k tbn, 50 tbc (default)
Metadata:
handler_name : VideoHandler
Input #1, png_pipe, from '/tmp/pallete.png':
Duration: N/A, bitrate: N/A
Stream #1:0: Video: png, rgba(pc), 16x16 [SAR 1:1 DAR 1:1], 25 tbr, 25 tbn, 25 tbc
Output #0, gif, to '/tmp/201631203815.gif':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.40.101
Stream #0:0: Video: gif, pal8, 480x480, q=2-31, 200 kb/s, 50 fps, 100 tbn, 50 tbc (default)
Metadata:
encoder : Lavc56.60.100 gif
Stream mapping:
Stream #0:0 (h264) -> fps
Stream #1:0 (png) -> paletteuse:palette
paletteuse -> Stream #0:0 (gif)
Press [q] to stop, [?] for help
frame= 275 fps= 32 q=-0.0 Lsize= 2480kB time=00:00:05.50 bitrate=3693.5kbits/s
如何确保输出 fps 始终是用户设置的? 非常感谢任何有关这方面的资源。
更新
我还注意到使用更高的 fps 例如filter="fps=90,scale=480:-1:flags=lanczos" 具有减慢 gif 的效果,就像慢动作效果一样,输出 fps 仍然低于 15fps 左右,
【问题讨论】:
-
您可能指的是
scale=-1:480,而不是scale=480:-1。 720p 和 480p 是指 Y 垂直分辨率。此外,您的计算机可能太慢而无法解码和查看高帧率 GIF(或者至少您的浏览器速度很慢)。尝试 VLC 媒体播放器或 XnView 来查看它们。动画 GIF 不像真正的电影文件那样优化,开发人员不太可能在简单的动画图形之外优化解码。
标签: ffmpeg animated-gif frame-rate