如何从帧中获取时间码?

how to get TIMECODE from a FRAME?

我正在尝试根据帧率将帧转换为时间码。

示例 1:

帧率是:23.976 fps (C1)

视频帧为:145068 (C2)

时间码是 01:40:50.544000000

时间码的格式为:HH:MM:SS.nnnnnnnnn(时:分:秒:纳秒)

-

编辑 1: 谢谢@Sangbok Lee / @Owen Campbell

现在我发现我可能在我的逻辑中选择了错误的方法(因为@Sangbok Lee 的回答对 "given" 数据不会错)...我假设如果我知道 FPS 和 FRAMERATE 我可以轻松转换FRAME 进入 TIMECODE 但看起来我哪里错了...

示例 2:我的视频文件 (mkv) fps 是 23.976。视频包含章节 (xml),其中一个章节标记为 01:40:50.544000000。现在,如果我跳到我的视频播放器 (potplayer) 中的那个章节标记并检查它说我在第 145068 帧的帧。

要点是,如果我抓取相同的视频文件(现在没有章节)并且我知道我想要 "chapter start" 的帧 (145068),我怎样才能得到这个 - 01:40:50.544000000 时间码 ?? <- 那是我真正的问题

编辑 2:

我刚刚发现 23,976 是 "fake" 数字。真正的 fps 是 24000/1001,即 23.976023976023976023976023976024,使用@Sangbok Lee 的公式,它给了我 01:40:50.544500000,我相信这是一个真正的交易。 -> sheet

更简单的方法是使用公式:

=TEXT( C2 / LEFT(C1,LEN(C1)-4) / 86400, "hh:mm:ss.000" )

虽然它并没有完全给出纳秒。

此公式获取视频帧并将其除以帧率以获得经过的秒数。将其除以 86400(一天中的秒数)以获得一天过去的百分比。 TEXT 函数可以将其格式化为时间戳。

为了获得帧率,我使用 LEFT 公式从单元格 (fps) 中删除了最后 4 个字符。

编辑:

here 所述,似乎很难在 Excel 中正确显示纳秒。这是必要的要求吗?

编辑 2:

使用 的高级方法并结合解析 fps 单元格中的数字,可以使用以下公式:

=TEXT(((C2/LEFT(C1, LEN(C1)-4))-MOD(C2/LEFT(C1, LEN(C1)-4),60))/86400,"hh:mm:")&MOD(C2/LEFT(C1, LEN(C1)-4),60)

让我们把这个复杂的问题分成几个部分。

  1. E2(hh) 设置为 =roundDown(C2/(3600*C1))
  2. F2(mm)设置为=roundDown((C2-(E2*(3600*C1)))/(60*C1))
  3. G2(ss) 设置为 =roundDown((C2-(E2*(3600*C1))-(F2*(60*C1)))/C1)
  4. H2(n...n) 设置为 =round((C2-(E2*(3600*C1))-(F2*(60*C1))-(G2*C1))/C1*1000000000)。您使用的公式不适用于纳秒。用于框架。
  5. 现在连接这些。将 I2 设置为:

=if(len(E2)=1, "0"&E2, E2)&":"& if(len(F2)=1, "0"&F2, F2)&":"& if(len(G2)=1, "0"&G2, G2)&"."& rept("0", 9-len(H2))&H2

  1. 结果是00:10:23.832165499。它与 Owen Campbell 的答案 (00:10:23.832) 相同,因此我认为您的第一个计算是错误的。样本 sheet 是 here.