问题标签 [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 回答
553 浏览

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

我试图了解哪些参数会导致这种情况。

如果您需要更多信息来解决这个问题,请告诉我。

0 投票
1 回答
66 浏览

c - 在终端中读取 noonnamed 管道

你好。我有非常简单的 C 程序。我在程序中创建管道(标准,未命名)。我可以在终端中读取现有进程的管道(使用 > 或 cat 进行流式传输吗?)。我尝试了一下,但我的命令什么也没做。我知道 tkat 我可以创建对外部 I/O 非常容易的命名管道。我有 /proc/number/fd 的管道数 为什么我需要它?仅来自调试(但不仅如此,我知道 gdb 可以看起来像管道)。当我 fork 进程时,子进程继承 pts(终端)和 std io/out。更改 pts 是可能的,但这是不好的方法。所以我将打开下一个终端并在其中流式传输现有的进程pipie。有可能(而且体面,头晕的方式让我不感兴趣)或者我必须使用命名管道?

0 投票
1 回答
432 浏览

video - 根据pts获取播放头位置

我正在尝试确定是否可以根据 TS 文件的 pts 获得播放头位置。

我发现的大多数文章都只是谈论使用 ffmpeg 而我没有使用它。

我的理解是 pts 是基于 pcr 的,它是 MPEG TS 规范中的一个可选字段。但是考虑到帧的位置可以计算到基于 pts 的流中的秒数。如果是这样,我该如何进行计算?

0 投票
0 回答
964 浏览

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,这是不可能的。

0 投票
1 回答
1241 浏览

android-ndk - 测量 eglPresentationTimeANDROID() 的效果

我正在调试一个eglPresentationTimeANDROID()用于改进lipsynk 的C++ 视频渲染器。此egl 扩展并非在我测试的所有设备上都可用,但对于某些设备(例如 adreno),必须手动禁用它 - 否则流会卡住。我知道有些设备实际上忽略了 PTS(参见 Android Native Window timestamp)。

我最近遇到了更多启用此功能时失败的设备(非常奇特),我考虑完全禁用它。但是为了做出这个决定,我想在决定摆脱它之前衡量这个 PTS 的效果。

0 投票
0 回答
346 浏览

ffmpeg - 如何在ffmpeg中使用pts

我有一个可以提供视频数据和 PTS 的库。库头文件是这样的:</p>

如您所见,该库给了我视频帧缓冲区地址和 PTS。

我使用 FFMpeg 正确解码视频数据。

我的问题是如何通过库提供的 ptsValue 来控制显示时间。

我需要将 ptsValue 设置为 AVFrame 吗?那么FFMPeg可以自己控制显示时间。或者我需要通过我自己的代码来控制显示?

我是 FFMpeg 的新手。请帮我。非常感谢!

0 投票
0 回答
1037 浏览

ffmpeg - ffmpeg PTS 计算

我使用 ffmpeg 将流保存在内存中,然后重新流式传输到我的 html5 网页...我想知道如何像 xtream 面板代码那样手动计算 PTS 值(PTS/网络速度 1.00x 或 1.34x 或 0.94 x)....我无法从 ffmpeg 获取输出,因为我没有将输出文件保存到硬盘,所以我需要手动计算它...

我从内存块流链接 pts_timebase 和其他一些信息(如比特率、分辨率等)中获取了所有信息……当您将文件从 ffmpeg 保存到 HDD 时,我如何手动计算 ffmpeg 输出等 PTS,然后您得到例如:

我想手动计算这个速度,在这个例子中是 2.61x ..计算这个的论坛是什么?

谢谢。

0 投票
0 回答
577 浏览

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 滴答声) 视频播放流畅。

问候,帕维尔。

0 投票
1 回答
1372 浏览

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”选项,但它们根本不起作用。

0 投票
1 回答
96 浏览

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?