gpt4 book ai didi

performance - FFmpeg 在重复拆分、选择、覆盖时使用太多内存

转载 作者:行者123 更新时间:2023-12-04 23:12:02 25 4
gpt4 key购买 nike

我在跑

ffmpeg -i input.mp4 -filter_complex_script script.txt output.mp4
使用以下最小示例脚本:
split[tmp],
select='between(t,1,2)',
select='between(n,0,1)',
[tmp]overlay=enable='between(t,1,2)':eof_action=repeat,
split[tmp],
select='between(t,3,4)',
select='between(n,0,1)',
[tmp]overlay=enable='between(t,3,4)':eof_action=repeat
我想要做的是在某个位置拍摄 1 帧并重复一段时间,基本上是“暂停”视频,同时覆盖以保持相同的输出长度。在示例中,我这样做了两次:我正在使用 split[tmp]要获得第二个输入流,请使用 select='between(t,1,2)' 选择位置 00:01 处的时间, 用 select='between(n,0,1)' 从该位置选择第一帧最后将该帧覆盖在输入上。这在 00:03 位置重复第二次。我已经对此进行了测试,它完全符合我的要求。
但是,在我的真实脚本中,我对流中的不同位置重复了大约 1000 次(并且持续时间小于 1 秒),这会导致内存不足。我究竟做错了什么?我可以做些什么来优化?

最佳答案

ffmpeg 中的过滤器基本上对帧而不是流进行操作。因此,每个选择过滤器都会评估每一帧,即使您知道开始时只有几帧符合选择条件。这样做 1000 次并不便宜。
对于您的用例,您不需要大部分内容。只有一个选择过滤器可以。select='if(eq(n,0),1,not((between(t,1.0,1.999)+between(t,3.0,3.999)+between(t,5.0,5.999))*eq(floor(t),floor(prev_selected_t))))'这将保留范围 [1-1.999]、[3-3.999] 和 [5-5.999] 之外的所有帧以及这些范围内的第一帧。如果您的输出格式需要恒定的帧速率,ffmpeg 将复制帧以填补时间戳间隙。

关于performance - FFmpeg 在重复拆分、选择、覆盖时使用太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64818899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com