微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以 ffmpeg -i %04d.png 模式重复图像

如何解决以 ffmpeg -i %04d.png 模式重复图像

我正在以 FPS=25 制作 20 秒的视频,其中 500 帧为 0000.png0001.png、...、0499.png。这有效:

ffmpeg -framerate 25 -i images/%04d.png out.mp4

但实际上视频中只有一些变化,就我而言,在第 0000、0122、0288、0312、0450 帧处。同时,PNG 是相同的强>.

问题:当只有 5 个不同的文件就足够时,生成 500 个 PNG 文件总是很慢!我只想生成那 5 个 PNG 文件,并从中生成视频。

当我使用包含 only images/0000.png0122.png0288.png、{{ 的 0312.png 尝试上面的命令时1}} 而不是其他 495 个,显然它失败了:

[image2 @ 00000000006d4040] 无法打开文件:images/0001.png

问题:有没有办法告诉 0450.png 在使用 ffmpeg 时忽略丢失的帧并使用最新的可用帧而不是失败?

如果没有,有什么替代方法可以只用这 5 个 PNG 来生成视频,这些 PNG 应该在一个精确的时间范围内到达?

解决方法

方法一:concat filter

使用 -t 输入选项声明持续时间,然后与 concat filter 连接。

ffmpeg -loop 1 -framerate 25 -t 4.88 -i 0000.png -loop 1 -framerate 25 -t 6.64 -i 0122.png -loop 1 -framerate 25 -t 0.96 -i 0288.png -loop 1 -framerate 25 -t 00:00:05.52 -i 0312.png -filter_complex "[0][1][2][3]concat=n=4:v=1:a=0,format=yuv420p" output.mp4

方法二:concat demuxer

concat demuxer 输入文件列表中使用 duration 指令声明持续时间,然后与 concat 分离器连接。

这可能是最快的方法。

  1. 使 input.txt 包含以下内容:

    file 0000.png
    duration 4.88
    file 0122.png
    duration 6.64
    file 0288.png
    duration 0.96
    file 0312.png
    duration 5.52
    
  2. 连接:

    ffmpeg -f concat -i input.txt -vf format=yuv420p output.mp4
    

方法 3:修剪过滤器

此方法允许您以帧为单位(和/或根据需要使用时间值)声明持续时间。

使用带有 trim filter 的持续时间帧并与 concat filter 连接的示例:

ffmpeg -loop 1 -framerate 25 -i 0000.png -loop 1 -framerate 25 -i 0122.png -loop 1 -framerate 25 -i 0288.png -loop 1 -framerate 25 -i 0312.png -filter_complex "[0]trim=start_frame=0:end_frame=121,setpts=PTS-STARTPTS[v0];[1]trim=start_frame=122:end_frame=287,setpts=PTS-STARTPTS[v1];[2]trim=start_frame=288:end_frame=311,setpts=PTS-STARTPTS[v2];[3]trim=start_frame=312:end_frame=449,setpts=PTS-STARTPTS[v3];[v0][v1][v2][v3]concat=n=4:v=1:a=0,format=yuv420p" output.mp4
,

你好,我昨天尝试了循环方法,我发现如果你有一个过时的 cpu,它可能需要更长的时间来编码视频而不是图像序列。 (我也弄坏了我的笔记本电脑)。 我认为这是因为即使有 5 张图像,ffmpeg 也总是要读取 500 帧来对视频进行编码。 由于关注的是编码效率,请阅读此编码指南 https://trac.ffmpeg.org/wiki/Encode/H.264 然后回到你的代码。 -framerate 默认为 25,你不需要声明它

ffmpeg -y -f image2 -pattern_type sequence -i images/%04d.png -c:v h264 -crf 51 -preset 'ultrafast' out.mp4

声明“-f image2 -pattern_type sequence”理论上应该可以节省探查文件的时间。

-crf 和预设是编码面包和黄油,该代码应该以低质量为代价为您提供最快的编码时间,请尝试并逐渐减小值,直到达到可接受的质量。

最后但并非最不重要的一点是您使用的格式减慢了编码速度:PNG 使用 256x256x256 颜色的巨大色彩空间,它们可以被解压缩 (1file=30mb)。 如果您不需要 alpha 通道,请尝试使用 jpegs,事情会变得更快。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。