我怎样才能始终如一地计时打印

How can I time prints consistently

我正在通过编写一堆通常无用的代码来训练我的 python 能力,今天我尝试像以前一样使用 ASCII 艺术在控制台中打印 Bad apple,我做了一切很好,直到我不得不为打印计时,以便它们在 3 分 52 秒内结束,保持一致的帧率。我试着在打印之间添加一个 time.sleep(),希望它能神奇地工作,但显然它没有。

我定制了这个 git https://github.com/aypro-droid/image-to-ascii to transform frames to ASCII art and used https://pypi.org/project/opencv-python/ 的一个版本,用于将视频转换为帧

这是我的代码:

import time
frames = {}
#saving each .txt frame on a dict
for i in range(6955):
    f = open("Frames-to-Ascii/output/output{0}.txt".format(i), "rt")
    frames['t{0}'.format(i)] = f.read()
    f.close()
#start "trigger"
ini = input('start(type anything): ')
start = time.time()
#printing the 6954 frames from the dict
for x in range(6955):
    eval("print(frames['t{0}'])".format(x))
    #my attempt at timing
    time.sleep(0.015)
end = time.time()
#calculating how much time the prints took overall, should be about 211.2 seconds evenly distributed to all the "frames"
print(end-start)

框架示例: here

我正在尝试将照片与视频完美同步,以便以后可以在其他地方使用它,有什么提示吗?

据我了解,您需要以给定的恒定速率打印帧? 如果是,那么您需要评估用于打印的时间,然后为延迟减去打印时间而休眠。类似于:

for x in range(6955):
    start = time.time()
    print("hips")
    end = time.time()
    time.sleep(0.5-(end-start))

因此循环将花费(大约)0.5 秒到 运行。 (根据您的需要相应地更改值)。

当然如果单次打印耗时比延迟时间长,则需要另寻策略:例如跨过下一帧等