如何解决以 ffmpeg -i %04d.png 模式重复图像
我正在以 FPS=25 制作 20 秒的视频,其中 500 帧为 0000.png
、0001.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.png
、0122.png
、0288.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 分离器连接。
这可能是最快的方法。
-
使
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
-
连接:
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 举报,一经查实,本站将立刻删除。