问题标签 [pts]

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.

0 投票
0 回答
376 浏览

avfoundation - swift 4 - avfoundation AVAssetWriter 不正确的 PTS/DTS

我正在更改 Aperture 代码以设置自定义视频比特率。当我录制视频时,质量和帧率都很好,但我发现元数据有问题。当我运行 ffmpeg 转换时,我看到以下错误:

我的代码似乎生成了不正确的 PTS/DTS 值。这是我的代码:

您能帮我如何更改我的代码以生成正确的 PTS/DTS 吗?谢谢

0 投票
1 回答
1397 浏览

video - How do I accurately extend the duration of a tiny video clip?

I noticed that ffmpeg doesn't always scale the duration of a clip to the desired value ( even accounting for milliseconds of precision loss.) For example, whenever I attempt to scale the duration of this tiny 67ms clip to 7 seconds:

the resulting video is only 3.5 seconds in duration.

Not really sure why this is off by multiple seconds, but I suspect it has something to do with the input clip itself ( which is only 2 frames @ 29.97 fps ) So far, I've discovered that if I scale the duration to a much larger value first, then scale back from that to 7 seconds, it works fine:

But I'm hoping I don't need to resort to an intermediate file. Is it possible to solve this with a single ffmpeg call?

If it helps, here is the video file I'm working with: https://drive.google.com/drive/folders/1hI5Xo6kfAfMd8ZylM6XrPX5fuO88gncE?usp=sharing

Note: I should mention that I don't need sound at all in this experiment ( hence the -an )

0 投票
1 回答
40 浏览

video - 为什么我无法将 4 秒 60 fps 的剪辑缩小到正好 1 秒?

我目前正在使用setpts过滤器来加速或减慢不同的剪辑,准确性对我来说非常重要(上下文:我将这些连接成一个需要与单独的视频完美同步的最终剪辑。)我'一直将其用作一般方法:

虽然它在大多数时候都相当准确,但我想知道我是否可以获得更好的结果。例如,如果我尝试将 4 秒 60fps 剪辑缩小到正好 1 秒,即:

ffmpeg -y -i clip_4sec.avi -filter:v "setpts=(1/240)*N/TB" -r 240/1 clip_4sec_scaled_to_1sec.avi

我实际上最终得到了一个 992 毫秒的剪辑。有谁知道为什么会这样?据我了解,只要目标持续时间是帧持续时间(1/60 秒)的倍数,这应该不是问题,对吗?

我可以采取更好的方法来提高准确性吗?

注意:FWIW 我已经仔细检查了输入剪辑的实际帧数为 240

0 投票
1 回答
8670 浏览

video - PTS必须从0开始吗?

我已经看到许多关于视频 PTS 值不从零开始的问题,或者询问如何使它们从零开始。我知道使用 ffmpeg 我可以做一些事情ffmpeg -i <video> -vf="setpts=PTS-STARTPTS" <output>来解决这种事情

但是,据我了解,PTS 值不必从零开始。例如,如果您加入直播,那么很可能它已经持续了一个小时,并且 PTS 已经在 3600000+ 左右,但您的视频播放器忠实地显示了一切。因此,如果我故意创建一个 PTS 值从当前挂钟时间开始的视频,我希望不会有问题。

我想使用 ffmpeg 发送实时流,但将当前时间嵌入到流中。这既可以用于在直播时计算延迟时间,也可以在以后确定流最初播出的时间。根据我对 PTS 的理解,像这样简单的事情应该可以工作:

但是,当我尝试此操作时,ffmpeg 输出以下内容:

请注意“时间”、比特率(0.0kbits)和速度(135000000000x !!!)的极大值

起初我认为问题可能是我的时基,所以我尝试了以下方法:

这以毫秒为单位(1 PTS = 1 ms),但我遇到了同样的问题(大量时间、零比特率和巨大速度)

我对 PTS 有误解吗?是否不允许从非零值开始?还是我只是做错了什么?

更新

在查看@Gyan 的答案后,我将命令格式化如下:

这样,PTS 值将匹配到“自流开始以来的毫秒数”,并将被流的开始时间抵消(理论上使 PTS = 服务器上的时间戳)

这看起来编码更好:

比特率现在是正确的,时间是准确的,而且速度也没有离谱。不过,每秒帧数仍然有点偏(源视频是 24 fps,但它报告每秒 7.2 帧)

当我尝试从另一端观看流时,视频与音频不同步,并以大约两倍正常速度播放了一段时间,然后视频冻结,音频继续没有它

此外,当我将流转储到文件 ( ffmpeg -i rtmp://<output> dump.mp4) 并使用 ffprobe () 查看 PTS 时间戳时,ffprobe -show_entries packet=codec_type,pts dump.mp4 | grep "video" -B 1 -A 2时间戳似乎根本没有显示服务器时间:

问题只是与 RTMP 不兼容吗?

更新 2

我已经删除了视频过滤器,现在我的编码如下:

这是正确编码:

为了验证 PTS 值是否正确,我将输出转储到文件中,如下所示:

我尝试将其保存为dump.flv(因为它是 RTMP)但是这引发了错误:

这有点奇怪,因为视频不是 mp3 编码的(它是 speex)——但无论如何。

转储此文件时,反复弹出以下错误:

在 VLC 中播放生成的视频会播放音频流,但不显示视频。然后,我尝试通过ffprobe查看视频 PTS 值来探测此视频:

这仅返回一个视频帧,其 PTS 并不像我预期的那样大:

这是一项异常艰巨的任务

0 投票
2 回答
269 浏览

c - glibc“login_tty()”函数的代码解释:“open(ttyname)”紧跟“close()”

我正在阅读 glibc 代码,特别是 login_tty 函数,我发现了一段对我来说没有多大意义的代码:

这会打开一个文件并立即关闭它,我想知道为什么

完整的功能代码

0 投票
1 回答
2772 浏览

python-3.x - 可以使用pyav获取视频中帧的时间戳 - python

如何从 pts 和 time_base 或 duration 获取视频或 rtmp 流中帧的时间戳?非常感谢!

PS:frame.time 与实际时间不符

0 投票
1 回答
57 浏览

javascript - 如何检测鼠标是否在屏幕的某个部分?

所以我试图根据指针的 Y 坐标更改变量的值,但我不确定我会如何做到这一点。我试过这个:

但我不知道在箱子里放什么。我想要做的是有这样的例子:case "top 20% of screen". 我如何弄清楚屏幕的坐标是什么,然后弄清楚如何在 switch 语句中使用它?

我想要影响值的部分只是水平划分的屏幕的五分之一。

编辑:

所以我被链接到另一个帖子,并找到了与我正在寻找的类似的答案。我将代码更改为如下所示:

但它仍然不起作用。有任何想法吗?

项目在这里:将受到影响的部分righttextdocument.querySelector(".r2").textContent = righttext

0 投票
1 回答
5679 浏览

video - ffprobe 获取最后一个音频/视频数据包的 pts

我有一个mov文件,我需要获得pts音频和视频流的结尾。我可以通过执行以下操作(手动)来做到这一点:

ffprobe -show_packets file.mov

这给了我这样的输出(当然还有更多的数据包):

在上述场景中,结束 pts221764用于音频和30000视频 ( pts + duration)。

我想知道是否有一种简单的方法可以直接通过 ffprobe 标志或智能解析输出来获取最终的音频/视频数据包 pts。

0 投票
1 回答
2358 浏览

video - ffmpeg setpts 应用统一偏移量而不重新编码

我有一系列要转换的视频,.mov然后.ts为其创建 HLS 播放列表。我能够找出任何给定视频的音频和视频流的结束点,并在转换序列中的后续视频时应用该结束(累积)偏移量。例如:

这可行,但需要相当数量的 CPU。我希望能够理想地复制视频/音频流。有没有办法为.ts文件的音频/视频流应用统一的 pts 偏移量,而无需重新编码整个内容?

0 投票
0 回答
1942 浏览

c - 如何在ffmpeg库中设置pts、dts和duration?

我想将一些压缩视频包(h.264)打包到“.mp4”容器中。一个字,Muxing,不解码不编码。而且我不知道如何设置 pts、dts 和持续时间。

  1. 我得到带有“pcap”库的数据包。
  2. 我在压缩视频数据出现之前删除了标题。例如以太网、VLAN。
  3. 我收集数据直到一帧并对其进行解码以获取数据信息。例如宽度、高度。(我不确定是否有必要)
  4. 我初始化了输出上下文、流和编解码器上下文。
  5. 我再次开始接收带有“pcap”库的数据包。(现在用于混合)
  6. 我制作了一帧并将该数据放入 AVPacket 结构中。
  7. 我尝试设置 PTS、DTS 和持续时间。(我认为这是错误的部分,但不确定)

*7-1。在第一帧,我用数据包头结构节省了时间(毫秒)。

*7-2。每当我制作一帧时,我都会设置如下参数:PTS(当前时间 - 开始时间),DTS(相同的 PTS 值),持续时间(当前 PTS - 在 PTS 之前)

我认为它有一些错误,因为:

  1. 我不知道从pts到dts有多远合适。

  2. 至少,我认为持续时间是指从现在到下一帧显示这一帧的时间,所以它应该有值(下一个 PTS - 当前 PTS),但当时我不知道下一个 PTS 的值。

它只有 I 帧。

预期和实际结果是可以播放的 .mp4 视频文件。