问题标签 [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.
video - 为什么使用 ffmpeg 解码时第二帧的 PTS 值错误?
我正在使用ffmpeg
将视频编码为 mp4。我有使用不同 GOP 和比特率值编码的 MP4。
当我逐帧解码视频时pkt_pts
,每个连续帧的时基单位应该增加。
一些 MP4 以正确的连续 pts 值跳跃。对于time_base={num=1, den=12800}
和frame_rate={num=1, den=25}
:interval=512 (12800/25)
第一帧有pts=0
,第二帧有pts=512
,第三帧有pts=1024
,......
但是,有些 MP4 虽然帧跳入正确的 pts 值,但第二帧却有错误的 pts 值。对于time_base={num=1, den=1200000}
和frame_rate={num=1, den=16}
:interval=75000 (1200000/16)
第一帧有pts=0
,第二帧有pts=48000
,第三帧有pts=123000
。为什么第二帧有pts=48000
而不是pts=75000
?
我试图了解哪些参数会导致这种情况。
如果您需要更多信息来解决这个问题,请告诉我。
c - 在终端中读取 noonnamed 管道
你好。我有非常简单的 C 程序。我在程序中创建管道(标准,未命名)。我可以在终端中读取现有进程的管道(使用 > 或 cat 进行流式传输吗?)。我尝试了一下,但我的命令什么也没做。我知道 tkat 我可以创建对外部 I/O 非常容易的命名管道。我有 /proc/number/fd 的管道数 为什么我需要它?仅来自调试(但不仅如此,我知道 gdb 可以看起来像管道)。当我 fork 进程时,子进程继承 pts(终端)和 std io/out。更改 pts 是可能的,但这是不好的方法。所以我将打开下一个终端并在其中流式传输现有的进程pipie。有可能(而且体面,头晕的方式让我不感兴趣)或者我必须使用命名管道?
video - 根据pts获取播放头位置
我正在尝试确定是否可以根据 TS 文件的 pts 获得播放头位置。
我发现的大多数文章都只是谈论使用 ffmpeg 而我没有使用它。
我的理解是 pts 是基于 pcr 的,它是 MPEG TS 规范中的一个可选字段。但是考虑到帧的位置可以计算到基于 pts 的流中的秒数。如果是这样,我该如何进行计算?
video - 使用 ffmpeg 减慢 960 fps 视频(setpts 不起作用)
我正在尝试减慢在 Android 手机上录制的视频的速度960fps
。我发现很多以前的帖子和博客基本上都说同样的事情,你需要更改“演示时间戳”(pts)。我还找到了说同样事情的官方文档。命令行基本上如下所示:
我使用 Android Filter Transfer 复制了视频文件,当我使用上面的命令行时,它可以减慢速度,但结果输出不稳定。的输出ffmpeg
还表明它正在复制帧:
在文件上运行ffprobe
显示:
这似乎检测到视频30 fps
不是960 fps
,这可能是它填充重复帧而不是使用现有帧的原因。
我在 Lenovo Z2 Plus(AKA Zuk Z2)上录制视频。如果我使用内置播放器以慢速播放视频,它看起来非常流畅,所以帧肯定在那里。有人可以帮我找出正确的方法吗?该文件可在此处获得(大约 10MB),以防有人想尝试。
更新:用另一部手机录制的手机上的慢动作视频播放。注意火花是多么平滑和缓慢,如果原始视频是 30fps,这是不可能的。
android-ndk - 测量 eglPresentationTimeANDROID() 的效果
我正在调试一个eglPresentationTimeANDROID()
用于改进lipsynk 的C++ 视频渲染器。此egl 扩展并非在我测试的所有设备上都可用,但对于某些设备(例如 adreno),必须手动禁用它 - 否则流会卡住。我知道有些设备实际上忽略了 PTS(参见 Android Native Window timestamp)。
我最近遇到了更多启用此功能时失败的设备(非常奇特),我考虑完全禁用它。但是为了做出这个决定,我想在决定摆脱它之前衡量这个 PTS 的效果。
ffmpeg - 如何在ffmpeg中使用pts
我有一个可以提供视频数据和 PTS 的库。库头文件是这样的:</p>
如您所见,该库给了我视频帧缓冲区地址和 PTS。
我使用 FFMpeg 正确解码视频数据。
我的问题是如何通过库提供的 ptsValue 来控制显示时间。
我需要将 ptsValue 设置为 AVFrame 吗?那么FFMPeg可以自己控制显示时间。或者我需要通过我自己的代码来控制显示?
我是 FFMpeg 的新手。请帮我。非常感谢!
ffmpeg - ffmpeg PTS 计算
我使用 ffmpeg 将流保存在内存中,然后重新流式传输到我的 html5 网页...我想知道如何像 xtream 面板代码那样手动计算 PTS 值(PTS/网络速度 1.00x 或 1.34x 或 0.94 x)....我无法从 ffmpeg 获取输出,因为我没有将输出文件保存到硬盘,所以我需要手动计算它...
我从内存块流链接 pts_timebase 和其他一些信息(如比特率、分辨率等)中获取了所有信息……当您将文件从 ffmpeg 保存到 HDD 时,我如何手动计算 ffmpeg 输出等 PTS,然后您得到例如:
我想手动计算这个速度,在这个例子中是 2.61x ..计算这个的论坛是什么?
谢谢。
ffmpeg - ffmpeg 复用到 mkv 容器
我正在将 H264 帧与来自 RTP 流的 alaw 音频帧混合,但我在为 mkv 容器设置 fps 时遇到了一些问题。
对于 AVPacket::pts,我使用的是计算出的演示时间(来自 RTCP SR 报告),我将它们重新缩放如下(我假设音频完全相同):
- 最后的时间戳以微秒为单位(第一个参数),理论上它是 NTP 派生的。
av_encode_codec_ctx->time_base
设置为{1,fps}
fps 取决于流的位置,比方说5
video_st->time_base
是自动到的{1,1000}
(我认为这是由 mkv 容器强制执行的)
我认为这是应该设置为重新缩放功能的内容(至少这是示例显示的内容),但是 ffprobe 显示奇怪的持续时间读数,并且 fps 设置为 1k ......而且视频播放很奇怪。
我的问题是我应该如何处理这个问题?我应该重新调整时间戳以从第一个数据包的 0 开始计数,还是我弄乱了两个不同的时域,因此 muxer 无法弄清楚该怎么做?
EDIT1:
我发现由于时间戳以微秒为单位(而且我没有编码),我应该将{1,1000000}
其用作 pts calc 的时基,而不是编解码器的时基。现在至少持续时间还可以,音频播放流畅,但视频“断断续续”,视频中的时间戳不会平滑增加……而且 fps 仍然是 1k
EDIT2 似乎在手动设置之后(可能一开始就应该这样设置)设置以下内容:
其中u8fps
是假定的每秒帧90000
速率, 是视频的标准采样率(90kHz 滴答声) 视频播放流畅。
问候,帕维尔。
ffmpeg - 使用ffmpeg转码时如何消除文件中的PTS间隙?
我有一个来自 rtmp 流的视频。
由于广播经常开和关,
存档文件具有如下 PTS
(假设这是秒)
0--10--20--30--40 120--130--140
40 到 120 秒之间存在不连续性。
此文件的持续时间必须为 60 秒,因为 40~120 之间有 80 秒的间隔。
但是当我转码这个文件时,最终持续时间变成了 140 秒,其中有 80 秒的暂停部分。
我如何在没有“不存在”80 秒的情况下转码这个文件,以便输出文件变成 60 秒而没有冗余暂停 80 秒。
我尝试了“+getpts”或“+igndts”选项,但它们根本不起作用。
bluetooth-lowenergy - BLE 一致性测试
我正在使用 PTS 工具了解 BLE 一致性测试程序。在 GAP profile 测试用例中,有一个测试用例,GAP/BROB/BCST/BV-01-C [Broadcast Mode No Scan Response]。根据这个测试用例,当 BLE 设备通告不可连接的广播数据包时,必须将可发现标志设置为不可发现。这意味着 BLE 数据包中与能力对应的第 3 个字段的值应为 04。而 ibeacon 和 eddystone 数据包发送此能力设置为 06。这是否意味着 ibeacon 和 eddystone 信标数据包不兼容 BLE?