用于生成APNG的FFMPEG控制延迟和循环



我有一组(随机选择的(JPG图像,我想使用ffmpeg将其制作成APNG动画(以测试过程(。它们都是相同的尺寸(256x256(。但我似乎无法获得正确的语法来控制帧延迟和循环控制(永远循环(。当从图像序列创建APNG时,是否可以使用ffmpeg设置这些参数?如果是,有人能提供正确的语法和/或显示命令示例吗?我搜索了ffmpeg文档,似乎找不到相关的语法。

我可以执行以下操作,但它不接受延迟或循环。我使用Imagemagik来导入图像。

这是有效的,但不会循环,并且运行速度非常快。

magick lena.jpg mandril3.jpg monet2.jpg zelda1.jpg PNG:- | ffmpeg -i - x.apng

这给出了关于延迟和/或环路的错误:

magick lena.jpg mandril3.jpg monet2.jpg zelda1.jpg PNG:- | ffmpeg -i - -delay 1000 -loop -1 x.apng

我也很想知道是否可以在不使用ImageMagick的情况下直接在ffmpeg中指定一系列图像作为输入。

对不起,我对ffmpeg还是个新手。我使用的是ffmpeg 4.2.1。

循环

您可以使用-plays输出选项设置循环。0是无限的,1是无循环,2将播放两次,等等

-plays是APNG复用器的特定选项(又称专用选项(。您可以看到具有ffmpeg -h muxer=apng的特定多路复用器的专用选项。请参阅FFmpeg支持哪些编解码器和格式?以获取更多示例。

APNG的另一个专用选项是-final_delay,以在最后一帧之后强制延迟。接受以秒为单位的值。

向ffmpeg提供图像

图像解复用器

最常见的方法是使用图像去复用器。

它接受编号序列,如image_001.pngimage_002.png等:

ffmpeg -framerate 3 -i image_%03d.png -plays 0 output.apng

或者一个glob(至少在Linux和macOS上(:

ffmpeg -framerate 1 -pattern_type glob -i "*.png" output.apng

使用-framerate输入选项设置延迟/定时,如以上示例所示。这是图像去复用器的一个私有选项。

管道

您可以像在问题中那样通过管道将图像发送到ffmpeg。与其他工具结合使用可以提供您喜欢的订单。

例如,使用sort有助于您的图像系列使用自然/版本编号,如1.png2.png。。。,10.png等。否则,ffmpeg将它们排序为1.png10.png2.png

cat $(find . -name '*.png' -print | sort -V) | ffmpeg -framerate 1 -i - -plays 1 output.apng

凹形解复用器

如果您想提供文件列表,也可以使用concat-demuxer。每个图像都可以有自己的持续时间。

  1. 创建包含的input.txt

    file 'lena.jpg'
    duration 1
    file 'mandril3.jpg'
    duration 0.5
    file 'monet2.jpg'
    duration 3
    file 'zelda1.jpg'
    duration 2
    

    持续时间值以秒为单位。

  2. 连接:

    ffmpeg -f concat -i input.txt -plays 0 output.apng
    

如果省略duration,并且希望图像之间的延迟/定时均匀,则可以使用-r输入选项。此示例将以每秒1帧的速度播放。

ffmpeg -r 1 -f concat -i input.txt -plays 0 output.apng

另请参阅FFmpeg Wiki:连接。

相关内容

  • 没有找到相关文章

最新更新