问题标签 [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.
avfoundation - swift 4 - avfoundation AVAssetWriter 不正确的 PTS/DTS
我正在更改 Aperture 代码以设置自定义视频比特率。当我录制视频时,质量和帧率都很好,但我发现元数据有问题。当我运行 ffmpeg 转换时,我看到以下错误:
我的代码似乎生成了不正确的 PTS/DTS 值。这是我的代码:
您能帮我如何更改我的代码以生成正确的 PTS/DTS 吗?谢谢
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
)
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
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 并不像我预期的那样大:
这是一项异常艰巨的任务
python-3.x - 可以使用pyav获取视频中帧的时间戳 - python
如何从 pts 和 time_base 或 duration 获取视频或 rtmp 流中帧的时间戳?非常感谢!
PS:frame.time 与实际时间不符
javascript - 如何检测鼠标是否在屏幕的某个部分?
所以我试图根据指针的 Y 坐标更改变量的值,但我不确定我会如何做到这一点。我试过这个:
但我不知道在箱子里放什么。我想要做的是有这样的例子:case "top 20% of screen"
. 我如何弄清楚屏幕的坐标是什么,然后弄清楚如何在 switch 语句中使用它?
我想要影响值的部分只是水平划分的屏幕的五分之一。
编辑:
所以我被链接到另一个帖子,并找到了与我正在寻找的类似的答案。我将代码更改为如下所示:
项目在这里:将受到影响的部分righttext
是document.querySelector(".r2").textContent = righttext
video - ffprobe 获取最后一个音频/视频数据包的 pts
我有一个mov
文件,我需要获得pts
音频和视频流的结尾。我可以通过执行以下操作(手动)来做到这一点:
ffprobe -show_packets file.mov
这给了我这样的输出(当然还有更多的数据包):
在上述场景中,结束 pts221764
用于音频和30000
视频 ( pts + duration
)。
我想知道是否有一种简单的方法可以直接通过 ffprobe 标志或智能解析输出来获取最终的音频/视频数据包 pts。
video - ffmpeg setpts 应用统一偏移量而不重新编码
我有一系列要转换的视频,.mov
然后.ts
为其创建 HLS 播放列表。我能够找出任何给定视频的音频和视频流的结束点,并在转换序列中的后续视频时应用该结束(累积)偏移量。例如:
这可行,但需要相当数量的 CPU。我希望能够理想地复制视频/音频流。有没有办法为.ts
文件的音频/视频流应用统一的 pts 偏移量,而无需重新编码整个内容?
c - 如何在ffmpeg库中设置pts、dts和duration?
我想将一些压缩视频包(h.264)打包到“.mp4”容器中。一个字,Muxing,不解码不编码。而且我不知道如何设置 pts、dts 和持续时间。
- 我得到带有“pcap”库的数据包。
- 我在压缩视频数据出现之前删除了标题。例如以太网、VLAN。
- 我收集数据直到一帧并对其进行解码以获取数据信息。例如宽度、高度。(我不确定是否有必要)
- 我初始化了输出上下文、流和编解码器上下文。
- 我再次开始接收带有“pcap”库的数据包。(现在用于混合)
- 我制作了一帧并将该数据放入 AVPacket 结构中。
- 我尝试设置 PTS、DTS 和持续时间。(我认为这是错误的部分,但不确定)
*7-1。在第一帧,我用数据包头结构节省了时间(毫秒)。
*7-2。每当我制作一帧时,我都会设置如下参数:PTS(当前时间 - 开始时间),DTS(相同的 PTS 值),持续时间(当前 PTS - 在 PTS 之前)
我认为它有一些错误,因为:
我不知道从pts到dts有多远合适。
至少,我认为持续时间是指从现在到下一帧显示这一帧的时间,所以它应该有值(下一个 PTS - 当前 PTS),但当时我不知道下一个 PTS 的值。
它只有 I 帧。
预期和实际结果是可以播放的 .mp4 视频文件。