将帧数转换为时间码的最佳代码/算法? < >我在C++中搜索最优源代码/算法 要将帧数转换为给定fps(例如25fps)中的时间码hh:mm:ss:ff

将帧数转换为时间码的最佳代码/算法? < >我在C++中搜索最优源代码/算法 要将帧数转换为给定fps(例如25fps)中的时间码hh:mm:ss:ff,c++,algorithm,timecodes,C++,Algorithm,Timecodes,此代码为preety good-(页面底部) 但它是昂贵的-它包含4个mod和6个div操作 我需要在每一帧上显示时间代码,所以计算这个算法 可能需要一些时间 我当然可以存储计算过的时间码,以避免计算 但了解更好的算法会很有帮助 提前谢谢 你的 m、 首先,问题可能是秒到小时、分钟、秒之间转换的最佳代码。此时,如果帧按顺序排列,您可以简单地使用加法来增加上一次的时间。Mod和div操作(到一个小的常量值)可以有效地执行,并与一些预先计算的倒数相乘。因此,它们并不昂贵。首先,我同意其他人的看法,即

此代码为preety good-(页面底部) 但它是昂贵的-它包含4个mod和6个div操作

我需要在每一帧上显示时间代码,所以计算这个算法 可能需要一些时间

我当然可以存储计算过的时间码,以避免计算

但了解更好的算法会很有帮助

提前谢谢 你的
m、

首先,问题可能是秒到小时、分钟、秒之间转换的最佳代码。此时,如果帧按顺序排列,您可以简单地使用加法来增加上一次的时间。

Mod和div操作(到一个小的常量值)可以有效地执行,并与一些预先计算的倒数相乘。因此,它们并不昂贵。

首先,我同意其他人的看法,即您可能不需要对此进行优化,除非您特别发现问题。然而,由于试图找到解决问题的方法很有趣,我将给你一些我第一眼看到的东西,以减少除法的数量

seconds = framenumber div 30
minutes = seconds div 60
hours = minutes div 60
frames = frameNumber mod 30
seconds = seconds mod 60
minutes = minutes mod 60
hours = hours mod 24

这是更多的代码行,但更少的划分。基本上,由于秒、分和小时使用了一些相同的数学,我在下一个公式中使用了一个的结果。

一般经验法则:在包括视频播放器的图像处理系统中,你为每像素运行一次的操作付出血汗,然后为每图像“补丁”运行一次的操作付出血汗(通常是一行像素),并且您不会为每帧运行一次的内容感到汗流浃背

原因是每像素的运行频率将是每补丁的数百倍,甚至数千倍,而每补丁的运行频率将是每帧的数百倍,甚至数千倍

这意味着每像素的数据运行频率可能是每帧数据运行频率的数百万倍。每像素一条指令可能会消耗每帧数百万条指令,而每帧几百条甚至几千条指令会在噪声层中根据每像素指令计数丢失

换句话说,你可能买得起MOD和DIV


话虽如此,运行自定义计数器而不是进行mod和div可能是合理的。

4 mod和6 div对于每帧来说都不是问题。Period25 fps是每40毫秒一帧。这在1GHz处理器上是40000000个时钟周期(就像我手机中的处理器)。除非你已经知道这是一个问题,否则不要担心优化这些东西(因为您已经运行了它,所以速度太慢,并且分析告诉您这就是您花费时间的地方)。我建议在假设您需要优化之前先测量实际性能影响。哈哈,我们以120fps的速度播放,我可以向您保证,与在该时间段内完成的操作相比,几个mod和div根本算不上什么。@mateusz_:解码一帧视频需要的CPU时间要多出几个数量级,而一些算术运算需要的CPU时间要多出几个数量级配给。只是将数据复制到屏幕上需要的时间比这些mul/div要多。你很可能优化得太早或是错误的。