fmw*_*w42 2 animation ffmpeg imagemagick apng
我有一个(随机选择的)JPG 图像,我想使用 ffmpeg 将其制作成 APNG 动画(以测试过程)。它们的尺寸均相同 (256x256)。但我似乎无法获得正确的语法来控制帧延迟和循环控制(永远循环)。从图像序列创建 APNG 时是否可以使用 ffmpeg 设置这些参数?如果是这样,有人可以提供正确的语法和/或显示示例命令吗?我搜索了 ffmpeg 文档,似乎找不到相关语法。
我可以执行以下操作,但它不接受 -delay 或 -loop。我使用 Imagemagick 来导入图像。
这可以工作,但不会循环,并且运行速度非常快。
magick lena.jpg mandril3.jpg monet2.jpg zelda1.jpg PNG:- | ffmpeg -i - x.apng
Run Code Online (Sandbox Code Playgroud)
这会产生有关延迟和/或循环的错误:
magick lena.jpg mandril3.jpg monet2.jpg zelda1.jpg PNG:- | ffmpeg -i - -delay 1000 -loop -1 x.apng
Run Code Online (Sandbox Code Playgroud)
我也很想知道是否可以直接在 ffmpeg 中指定图像序列作为输入,而不使用 ImageMagick。
抱歉,我是 ffmpeg 的新手。我使用的是 ffmpeg 4.2.1。
您可以使用-plays输出选项设置循环。0是无限的、1没有循环、2将播放两次等。
-plays是APNG 复用器的特定选项(也称为私有选项)。您可以使用 来查看特定复用器的私有选项ffmpeg -h muxer=apng。请参阅FFmpeg 支持哪些编解码器和格式?了解更多示例。
APNG 的另一个私有选项是-final_delay在最后一帧之后强制延迟。接受以秒为单位的值。
最常见的方法是使用图像分离器。
它接受编号序列,例如image_001.png、image_002.png等:
ffmpeg -framerate 3 -i image_%03d.png -plays 0 output.apng
Run Code Online (Sandbox Code Playgroud)
或者一个 glob(至少在 Linux 和 macOS 上):
ffmpeg -framerate 1 -pattern_type glob -i "*.png" output.apng
Run Code Online (Sandbox Code Playgroud)
使用输入选项设置延迟/计时,-framerate如上例所示。这是图像解复用器的私有选项。
ffmpeg您可以像在问题中那样将图像通过管道传输。可以与其他工具结合使用来提供您喜欢的顺序。
例如,使用sort自然/版本编号(例如1.png, 2.png, ...,10.png等)对您的图像系列很有帮助。否则ffmpeg会将它们排序为1.png, 10.png, 2.png。
cat $(find . -name '*.png' -print | sort -V) | ffmpeg -framerate 1 -i - -plays 1 output.apng
Run Code Online (Sandbox Code Playgroud)
或者,如果您想提供文件列表,请使用concat demuxer 。每个图像可以有自己的持续时间。
创建input.txt包含:
file 'lena.jpg'
duration 1
file 'mandril3.jpg'
duration 0.5
file 'monet2.jpg'
duration 3
file 'zelda1.jpg'
duration 2
Run Code Online (Sandbox Code Playgroud)
持续时间值以秒为单位。
连接:
ffmpeg -f concat -i input.txt -plays 0 output.apng
Run Code Online (Sandbox Code Playgroud)
如果您省略duration,并且希望图像之间有均匀的延迟/计时,您可以使用-r输入选项。此示例将以每秒 1 帧的速度播放。
ffmpeg -r 1 -f concat -i input.txt -plays 0 output.apng
Run Code Online (Sandbox Code Playgroud)
另请参阅FFmpeg Wiki:连接。
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |