我正在寻找C++ 中的最佳源代码/算法,以将帧数转换为给定 fps 中的时间码 hh:mm:ss:ff,例如。25帧...
这段代码非常好 - http://www.andrewduncan.ws/Timecodes/Timecodes.html(页面底部)但它很昂贵 - 它包含 4 个 mod 和 6 个 div 操作
我需要在每一帧上显示时间码,所以计算这个算法可能需要一些时间。
我当然可以存储评估的时间码以避免计算。
但是了解更好的算法会很有帮助...
提前谢谢你的米。
我正在寻找C++ 中的最佳源代码/算法,以将帧数转换为给定 fps 中的时间码 hh:mm:ss:ff,例如。25帧...
这段代码非常好 - http://www.andrewduncan.ws/Timecodes/Timecodes.html(页面底部)但它很昂贵 - 它包含 4 个 mod 和 6 个 div 操作
我需要在每一帧上显示时间码,所以计算这个算法可能需要一些时间。
我当然可以存储评估的时间码以避免计算。
但是了解更好的算法会很有帮助...
提前谢谢你的米。
一般经验法则:在包括视频播放器在内的图像处理系统中,您为每个像素运行一次的操作流汗,然后为每个图像“补丁”(通常是一行像素)运行一次的操作流汗,而且你不会为每帧运行一次的东西出汗。
原因是每个像素的东西运行的频率是每个补丁的东西的数百甚至数千倍,而每个补丁的东西的运行频率是每帧的东西的数百甚至数千倍.
这意味着每像素内容的运行频率可能是每帧内容的数百万倍。每像素一条指令可能每帧花费数百万条指令,并且每帧数百甚至数千条指令在本底噪声中丢失,与每像素指令计数相比。
换句话说,你可能买得起模组和 div。
话虽如此,运行自定义计数器而不是执行 mods 和 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
它是更多的代码行,但更少的划分。基本上,由于秒、分钟和小时使用一些相同的数学运算,因此我将公式中一个的结果用于下一个。
First of all, the question might better be optimal code for conversion between seconds to hours, minutes, seconds. At this point, if frames come in order, you can simply use addition to increase the previous time.
Mod 和 div 操作(到一个小的常数值)可以通过乘以一些预先计算的倒数来有效地执行。所以它们并不昂贵。