我尝试使用 ffmpeg 执行此操作但失败了(制作动画 GIF 也失败了)。有没有一个简单易用的免费程序(命令行也可以)可以将视频转换为动画 PNG?
只要它不会将视频逐帧转储到 PNG 文件中并创建巨大尺寸的 PNG,我就喜欢它。(我没有看到让 ffmpeg 不转储每一帧的选项)
答案1
mng 从未获得太多支持,但是APNG 显然现在得到了一些支持(FF/Chrome/Safari); 多于WebP(Chrome/Opera)。请务必检查浏览器是否支持该格式,以查看它是否与您的用例兼容。(请注意,APNG 会像非动画 PNG 一样显示第一帧。)
FFmpeg 可以解码和编码动画 png,以及动画 gif 和 webp。(据我所知,没有其他 FFmpeg 输出格式支持容器中的循环标志,甚至 nut、mkv 或 ogg 也不行。)旧版本的 FFmpeg 仅支持 apng 作为输出格式(编码但不支持解码)。
webp是当前支持动画的图像格式,正在努力获得关注。有了谷歌的支持,它有很大的机会。它可以实现有损和无损,甚至可以实现无损透明的有损图像。据我回忆,它基于 VPx 视频编解码器的帧内处理。
ffmpeg 可以创建 webp 动画,但即使 ffplay 也无法播放它们。vwebp(在 webp 包中)可以。
ffmpeg -framerate 15 -i b93-'%d.png' -loop 128 containerloop.webp
. (或者-i foo.mp4
或其他)。
另一种在网络上放置重复循环图像的方法是HTML5 视频标签环形属性。非常适合高分辨率和实景(而不是大量区域颜色相同的计算机图形)。不过,不要到处使用它来代替动画 gif。Web 浏览器并未针对页面上的大量小视频进行优化。
你能使用现代高质量编码器(如 VP9 或 x264),制作高度压缩和/或低帧率的视频,以获得仅几百 kiB 的高质量短循环(用于实况动作)或仅几 kiB 的简单内容。(或者可能在几年后,x265 会非常出色,非常分辨率比特率较低,即每像素位数非常低。
答案2
这种事情以前也做过(用 gif),使用图像魔法。APNG 不是官方文件格式 - PNG 组不支持此扩展。即使您使其工作正常,您也可能会遇到挥之不去的问题。您可能应该考虑使用动画 gif,除非您出于某些原因被迫使用 png。
我似乎能够在 Linux 上直接将 avi 转换为 apng,但在 Windows 上却失败了。在 Windows 上,一种解决方法是将电影转换为一系列静态图像:
convert test.avi frame%04d.png
如果你想使用 ffmpeg,这将每 5 秒提取一次帧:
ffmpeg -i test.avi -y -ss 5 -an -r 1/5 frame%03d.png
然后使用apng 编辑 Firefox 插件。