gpt4 book ai didi

algorithm - 将帧转换为 NTSC 丢帧时间码

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:32 26 4
gpt4 key购买 nike

我正在寻找一个将帧中的整数值转换为 NTSC 丢帧时间码 (hh:mm:ss.ff) 的函数。

我正在使用 Delphi,但可以使用任何语言。

谢谢

最佳答案

这个问题有一个众所周知的经典解决方案...

  • 输入帧数 nr 是相对于实际帧率的,对于 NTSC,它总是 30000/1001 ~= 29.97 帧/秒
  • 计算结果 frame-nr 是 30fps 的标称帧率(并且将在每整分钟显示 +2 帧跳跃,除非该分钟可被 10 整除

(当然,如果你知道你的取值范围是有限的,你可以使用更小的 int 类型)

const uint FRAMES_PER_10min = 10*60 * 30000/1001;
const uint FRAMES_PER_1min = 1*60 * 30000/1001;
const uint DISCREPANCY = (1*60 * 30) - FRAMES_PER_1min;


/** reverse the drop-frame calculation
* @param frameNr raw frame number in 30000/1001 = 29.97fps
* @return frame number using NTSC drop-frame encoding, nominally 30fps
*/
int64_t
calculate_drop_frame_number (int64_t frameNr)
{
// partition into 10 minute segments
lldiv_t tenMinFrames = lldiv (frameNr, FRAMES_PER_10min);

// ensure the drop-frame incidents happen at full minutes;
// at start of each 10-minute segment *no* drop incident happens,
// thus we need to correct discrepancy between nominal/real framerate once:
int64_t remainingMinutes = (tenMinFrames.rem - DISCREPANCY) / FRAMES_PER_1min;

int64_t dropIncidents = (10-1) * tenMinFrames.quot + remainingMinutes;
return frameNr + 2*dropIncidents;
} // perform "drop"

从生成的“drop”frameNumber,您可以像往常一样计算组件,使用标称的 30fps 帧速率...

frames  =    frameNumber % 30
seconds = (frameNumber / 30) % 60

等等……

关于algorithm - 将帧转换为 NTSC 丢帧时间码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/869490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com