【发布时间】:2017-03-28 20:33:50
【问题描述】:
我想从视频中创建最多 30 张图像(并将它们平铺成精灵表)。
我尝试将“select”与“mod”一起使用,但如果总帧数不能完全符合所需的图像数量 (30),那么我有时会得到更多图像,有时会更少。
例如,如果我的视频长度为 72 帧,我的“mod”将为 72 / 30,即 2.4。
我正在从 python 脚本运行它,所以我正在为过滤器执行以下操作:
select='not(mod(n\," + str(mod) + "))'
我认为 mod 必须是一个整数 (?),所以我可以向下取整并使用 2,得到 36 张图像,或者向上取整,得到 24 张图像
精确到 30 的最佳方法是什么? - 显然间隔不会相同,但没关系。
也许我可以使用 for 循环生成最接近所需间隔的帧列表,然后将其作为选择过滤器传入?
例如要获得框架,我会这样做:
nframes = 72 # number of frames in video
outImages = 30 # number of images I want
mod = float(nframes) / outImages # 2.4
frames = []
idx = 1
while i < nframes:
print str(idx) + ": " + str(math.floor(i+0.5))
frames.append(int(math.floor(i+0.5)))
idx += 1
i += mod
那么我可以将它(帧列表)传递给 ffmpeg 命令吗?或者我可以告诉 ffmpeg 做类似的事情吗?
【问题讨论】:
标签: select video ffmpeg frames