我在c ++中搜索最佳源代码/算法 将帧数转换为时间码hh:mm:ss:ff在给定的fps中,例如。 25fps的...
这段代码很好 - http://www.andrewduncan.ws/Timecodes/Timecodes.html(页面底部) 但它很昂贵 - 它包含4个mod和6个div操作
我需要在每一帧上显示时间码,所以计算这个算法 可能需要一些时间。
我当然可以存储评估的时间码以避免计算。
但知道更好的算法会非常有用......
提前谢谢 你的 米。答案 0 :(得分:6)
一般的经验法则:在包含视频播放器的图像处理系统中,你会为每个像素运行一次的操作冒汗,然后你会为每个图像“补丁”运行一次的操作而烦恼(通常是一行像素),你不会出现每帧运行一次的东西。
原因是每像素的内容会比每个补丁的内容多出几百甚至几千倍,并且每个补丁内容的运行频率将达到数百甚至数千倍。 -frame stuff。
这意味着每像素内容的运行频率可能是每帧内容的数百万倍。每个像素一个指令可能每帧花费数百万个指令,并且每个帧的几百甚至几千个指令在噪声基底中相对于每像素指令计数丢失。
换句话说,你可以买得起mod和div。
话虽如此,运行自定义计数器而不是执行mods和div可能是合理的。
答案 1 :(得分:2)
首先,问题可能更适合在几秒到几小时,几分钟,几秒之间进行转换的最佳代码。此时,如果帧按顺序排列,您可以简单地使用加法来增加之前的时间。
答案 2 :(得分:2)
首先,除非您特别注意到问题,否则我同意其他所有人您可能不需要对此进行优化。然而,由于尝试寻找方法很有趣,我会给你一些我乍看之下减少分数的东西。
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
这是更多的代码行,但分歧更少。基本上,由于秒,分和小时使用一些相同的数学,我使用公式中的一个结果用于下一个。
答案 3 :(得分:1)
可以通过乘以某些预先计算的倒数来有效地执行Mod和div运算(到一个小的常数值)。所以它们并不昂贵。