问题标签 [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 投票
1 回答
1508 浏览

video - 叠加层中的ffmpeg延迟视频

我正在尝试覆盖 2 个视频,其中一个(“底部”上的那个),我想延迟开始(比如说 2 秒)。

因此,要么在延迟期间保持第一帧,要么在延迟期间保持黑色帧。我对哪个没有偏好。

这是我基于这个类似问题所尝试的:https ://superuser.com/questions/734234/delayed-video-overlay-using-ffmpeg

但是,这样做的结果是两个视频都会在延迟的持续时间内(在这种情况下为 2 秒)冻结第一帧。我尝试了很多替代选项,包括

  • 仅在其中一个视频流上设置 PTS,而不是同时在两个视频流上设置
  • 使用-itsoffset而不是 PTS

似乎没有任何效果。

0 投票
1 回答
281 浏览

c++ - 窥探伪终端

我想编写一个程序,可以在不影响原始终端的情况下捕获伪终端的输入/输出。它可以比作指向script一个/dev/pts/<n>.

用例:用户 ssh 进入我的机器并运行交互式工具。通过审计,我可以看到正在运行的命令,但我还需要查看输出。我可以听,/dev/pts/<n>但原来登录的用户没有得到输出。

我想编写自己的程序来处理这种情况。这个问题实际上可以解决吗?如果可以,我应该在哪里寻找解决方案?

0 投票
1 回答
74 浏览

computer-vision - 关于通过appsrc将cv::Mat保存到mp4文件的问题

我想通过appsrc将CV::mat保存为MP4文件或通过RTMP转发。我实现了一个简单的代码,可以成功运行,但是得到的MP4文件不能播放。有人可以告诉我问题是什么吗?我想可能是PTS设置错误,但我不知道如何解决。提前谢谢你。

0 投票
0 回答
206 浏览

ffmpeg - ffmpeg - 使用编解码器副本搜索后pts漂移

有两个 ffmpeg 命令。第一个用于查找和复制视频块。第二个用于对视频块进行转码,应用选择过滤器以实现精确的帧匹配。

方法如下:

  1. ffmpeg -ss <sec_from> -to <sec_to> -copyts -i <input> -map 0:v:0 -c copy chunk.mp4
  2. ffmpeg -copyts -i chunk.mp4 -vf 'select=between(pts\,<pts_from>\,<pts_to>)' transcoded_cunk.mp4

它在大多数情况下都能正常工作。但是对于某些输入,下载的块中有一点点漂移,因此可能会丢失帧。换句话说,相同数据包的点(通过哈希比较)在输入和分块输出之间移动了几个点(在我的情况下为 0,0002 秒)。

这种pts漂移的可能原因是什么?

更新 1:那是因为 ffmpeg 在 mvhd atom 中设置 timescale=1000 所以编辑列表媒体时间开始时会失去精度。是否可以强制 mvhd 时间刻度?

更新 2:无法更改 mvhd 时间刻度,因为 ffmpeg 使用常量(MOV_TIMESCALE 1000):

https://github.com/FFmpeg/FFmpeg/blob/82bd02a2c73bb5e6b7cf5e5eba486e279f1a7358/libavformat/movenc.c#L3498

更新 3: 之前讨论过的相同问题

0 投票
1 回答
504 浏览

linux - 如何使用 GStreamer 正确连接 mp4 视频

我们对 GStreamer 比较陌生。我们在基于 Linux 的定制板上运行 GStreamer 1.18.4,我们有一个管道,使用rtspsrc从 IP 摄像机接收视频并创建 10 秒的 MP4 视频剪辑。我们遇到了缺少的 PTS 问题,我们能够通过实施从 C 代码打开插值的解决方法(gst_base_parse_set_pts_interpolation on)来解决它。现在 10 秒的视频剪辑已正确录制。

我们用于创建视频的管道如下(元素 h264parse 的插值设置为 on):

现在我们面临一个问题,我们需要连接其中一些视频(假设连接 6 个 10 秒的视频以获得一个 1 分钟的长视频),并且我们的管道经常被破坏。

我们认为,当连接的视频之一具有 PTS 插值(我们实施的解决方法)时,管道会中断。

我们用来连接的管道是:

我们已经测试了多次连接同一视频的管道,在这种情况下,一切都按预期工作。连接不同文件时(有时)失败。

我们尝试了对管道的几种不同修改,但所有修改都在qtdemux元素上失败,并显示以下消息:

知道我们如何改进管道以使连接更好、更健壮,以应对 PTS 可能出现的错误/不一致吗?

0 投票
1 回答
350 浏览

gstreamer - 使用“时钟时间”而不是 GStreamer 管道的运行时间

我有两个 GStreamer 管道,一个就像一个“源”管道,将实时摄像头馈送到外部通道,第二个管道就像一个“接收器”管道,从该通道的另一端读取并输出实时视频到某种形式的水槽。

第一个管道从 a 开始videotestsrc,对视频进行编码并将其包装在gdppay有效负载中,然后将管道接收到串行通道中(但为了这个问题,任何可以读取的接收器都可以启动另一个管道,如写入文件接收器串行端口或 udpsink),它由下一个管道的源读取并通过 a 显示autovideosrc

“源”管道

“下沉”管道

注意:鉴于使用 udpsink/udpsrc 引起的延迟,该管道会抱怨时间戳问题。如果您将 udpsrc/udpsink 替换为 filesrc/filesink 到串行端口,您会看到我将要描述的问题。

问题:

既然我已经描述了管道,问题就来了:如果我启动两个管道,一切都会按预期工作。但是,如果在 30 秒后,我停止“源”管道并重新启动管道,运行时间将重置为零,导致所有缓冲区的时间戳被发送到接收器管道视为旧缓冲区,因为它已经接收到时间戳为 0 到 30 秒的缓冲区,因此另一端的播放要到 30 秒后才会恢复:

解决方案

我发现添加确实sync=false可以autovideosink解决问题,但是我希望找到一个解决方案,其中源将根据该页面上的图像中看到的时钟时间发送其时间戳(DTS 和 PTS)。

我已经看过这篇文章is-live并在我的视频源上进行了实验do-timestamp,但他们似乎没有做我想做的事。我还尝试根据系统时间手动设置缓冲区中的时间戳(DTS、PTS),但无济于事。

有什么建议么?

0 投票
0 回答
44 浏览

ffmpeg - 提取FFMPEG中每个jpeg的时间戳

我使用 ffmpeg 从网络摄像机获取 H264 流,并将视频流转换为 jpeg。Jpeg 图像不会保存到文件中,而是缓冲在节点 js 应用程序中视频)。有没有办法提取一些我可以与ffmpeg中的相机时间戳相关的时间?我搜索了很多,但一无所获。实际上要获得我使用的jpeg