问题标签 [timecodes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ffmpeg - ffmpeg - 时间码和小数帧率(复制帧)
我使用 ffmpeg 录制了两种不同的帧率,60 和 100。或者至少我以为我在录制 60 和 100,现在看来它实际上是 59.94 和 99.98。
这是我使用的命令:
我认为我的帧速率一切都很好,肯定 ffmpeg 每隔一段时间就会复制帧,但我认为这只是 ffmpeg 在处理过程中丢帧引起的随机事件,因此需要复制一个帧来弥补。我不认为在镜头中复制几帧会很明显......直到我从第一个输出中查看一些帧,这实际上是一台相机,并注意到每分钟持续 3 次非常轻微的卡顿。这开始困扰我,它非常明显,我想要流畅的镜头。有点困惑,我决定自己尝试第一个输出并观察 ffmpeg 以查看何时复制帧,发现它每 17 秒(更准确地说是 16.66)复制帧。
算了一下(1/16.66=.06),我意识到第一张采集卡的帧率实际上是 59.94。对其他输出做同样的事情,我发现我的“100fps”素材实际上是 99.98。但这真的意味着什么?
我应该将 fps 更改为 59.94 和 99.98 吗?这不会导致同步问题,因为 99.98 (100*.0002=99.98) 与 59.94 (60*.001=59.94) 的标准不同?或者这是否意味着我只需将第二个输出设置为 99.9 (100*.001=99.9) 以匹配第一个输出和丢帧的标准?如果是这种情况,这是否意味着在我的编辑程序 Adobe Premiere 中,我需要将最终视频导出为 59.94fps 而不是 60fps 以避免重复帧?或者时间码中是否有一些方法可以解决这个问题?
我想我只是真的不了解丢帧和非丢帧时间码/时间码。直到昨天,当有人说 60fps 时,我认为它的字面意思是 60fps,但我猜 99% 的时间它实际上意味着 59.94。我真的很想避免重复帧,因为它会破坏流畅的体验,但不知道我是否可以在尝试保持所有内容同步的同时。
任何帮助或见解将不胜感激,对不起,如果我的问题有点令人困惑,我无疑会感到困惑。
vbscript - 删除 EDL 文本文件的元素,对其他部分执行算术运算
我有一个简单格式化的文本文件(编辑决策列表),其中包含数字行(时间码帧速率 25),后跟属性行(名称等)。
最终我试图:
检索以开头
* FROM CLIP NAME:
的行和紧接在上面的行/行(时间码)。这一行是时间码,有 4 组数字,每组表示为 00:00:00:00 - 或 HH:MM:SS:FF 或小时、分钟、秒、帧。然后我丢弃其他所有东西。使用前 2 个数字组(它们是开始时间和结束时间)推导出持续时间。
然后将持续时间附加到剪辑名称行。
将文件另存为“SourceFileName”.txt(原始文件为 .edl,因此它们不会被覆盖)。
由于我的帧速率是每秒 25 帧,我希望将每个组分解为一个帧数。
我希望将时间码转换为每秒 25 帧:
- 小时到帧时基 (25fps) 1 小时 = 1*60*(60*25) = 9000
- 分钟到帧时基 (25fps) 1 分钟 = 1*(60*25) = 1500
- 秒到帧时基 (25fps) 1 秒 = 1*25f
这将使一组 00:02:20:01 = 3501 帧
- 3501 整数除法 // 25 fps = 140 秒
3501 模数 (%) 25 = 1 帧余数
140/60 = 2 分钟
- 140%60 = 20 秒
然后我会从第二组中减去第一组以找出差异。一旦我有了差异,我将帧计数重新组合为时间码,只需反转数学。
我不知道如何指定名称行,然后使用 4 组中的前 2 组获取前一行进行算术运算。
到目前为止(不远),我只为用户建立了一种在他们的桌面上定义源文件的方法。
更新:修改后的脚本,但我什至无法对选定的行及其开始/结束值进行分组
示例 .edl 文件:
我必须在 VBScript 中执行此操作,以便我们可以在各种用户的 Windows 桌面上运行它。我们无法安装其他可执行文件或从命令提示符运行。我没有管理员安装的权限。
vbscript - 如何在 Vbscript 中将时间码字符串更改为数字?
我有这种形式的字符串输入:
从上一个问题中,我可以通过以下方式捕获它:
现在我有 2 个子匹配需要对其执行算术运算。
如何将每个子匹配分离到由“:”分隔的数字对列表中(不确定术语?)?
这些字符串是我想分解为帧数的时间戳。
我希望将时间码转换为每秒 25 帧:
- 第一对是小时到帧时基 (25fps) 1 小时 = 1*60*(60*25) = 9000
- 第二对是分钟到帧时基 (25fps) 1 分钟 = 1*(60*25) = 1500
- 第三对是秒到帧时基 (25fps) 1 秒 = 1*25f
例如,00:02:20:01的子匹配将转换为3501帧
上一个问题供参考
编辑 这就是我最终得到的。我必须找到以“秒”为单位返回答案的时间值之间的差异(datediff),然后我将其转换为带有时间序列的时间格式。但它附加了一个 AM/PM 时钟,所以我将脚本区域设置为德国,这会关闭 AM/PM 后缀。
loops - 复制 EDL 的部分内容,计算持续时间但循环失败
我有一个简单格式化的文本文件(编辑决策列表),其中包含数字行,后跟属性行(名称等)。对于每场比赛,我试图从名称字符串中创建一个列表,然后是持续时间(时间戳之间的差异)。
导致:
12 - 科技性感 - D Cebert - FFP170 Dur:00.38
到目前为止我已经
- 为用户在他们的桌面上定义源文件建立了一种方式。
- 定义了一种对源时间戳进行排序的方法(按相应名称行之前的时间戳)。
- 发现前 2 个时间戳之间存在差异。
但我的循环似乎不起作用。我至少希望看到每个匹配的时间戳行的持续时间列表。
到目前为止的脚本:
源文件:
milliseconds - MPV 播放器时间格式 HH:MM:SS 或 HH:MM:SS:mmm
有人知道,是否可以在 mpv.conf 中设置默认显示时间格式,包括毫秒?
现在我需要点击时间切换到毫秒,因为手动https://mpv.io/manual/master/中的选项 ,,timems''不起作用。
谢谢彼得的帮助
c++ - 包含数据流的 Remux mp4 文件
我正在开发一个应用程序,该应用程序需要使用 FFmpeg C++ API 克隆一个包含所有流的 MP4 视频文件,并基于FFmpeg remuxing example成功地使其工作。
这对视频和音频流非常有用,但是当视频包含数据流(实际上是根据 MediaInfo 的 QuickTime 时间码)时,我会收到此错误。
我发现这发生在对avformat_write_header()
.
有意义的是,如果 FFmpeg 不知道编解码器,则无法将其写入标头,但我发现使用 ffmpeg 命令行我可以使用流的复制命令使其完美工作,例如:
我一直在分析 ffmpeg.c 的实现,试图了解它们是如何进行流复制的,但是沿着巨大的管道走下去是非常痛苦的。
使用 FFmpeg C++ API 重新混合这种类型的数据流的正确方法是什么?任何提示或指针?
html - 输入格式 smpte-timecode
使用 smpte-timecode 时设置输入格式的最佳方法是什么?
这一直导致以下错误:时间码字符串预期为 HH:MM:SS:FF 或 HH:MM:SS;FF
c# - c#字符串到时间码
我需要构建一个可以像这样返回字符串的方法
00:00:00:00
hh:mm:ss:fr
如果我将 10 秒传递给该方法,它应该给出输出:00:00:10:00
,所以如果分钟/小时/帧为空,它应该输入 00.as 在这个例子中。
这可能与正则表达式。
python - 时间码系列,用于区分每个时间码和第一个时间码
如何获取从第一个时间码到系列中每个后续时间码的毫秒?
我完全不知道如何做到这一点,并且尝试过谷歌搜索但运气不佳。