从ffmpeg获取帧pkt_pts

时间:2018-02-01 19:03:31

标签: ffmpeg

我录制了一个类似于此的流(但我将图像传输到stdout并实时处理帧):

ffmpeg -debug_ts -y -i http://my_stream.com -strict -2 out.mp4

现在我需要将我的帧映射到 pkt_pts 。这个 pkt_pts 我可以通过运行来获得:

ffprobe -i http://my_stream.com -show_frames -select_streams v:0

虽然启动ffprobe不是一个选项,因为我需要准确地知道哪个 pkt_pts 属于哪个帧。 因此,我在我的ffmpeg调用中使用-debug_ts,这给了我很多输出到stderr,然后我解析出来。与帧数匹配的唯一输出行是以以下内容开头的输出行:muxer <- type:video此行包含 pkt_pts ,但它始终以0开头(不是全局 pkt_pts )。

有没有办法使用ffmpeg实时将帧映射到全局 pkt_pts

1 个答案:

答案 0 :(得分:0)

您可以运行原始命令,并提取以

开头的行

demuxer -> ist_index:X

其中X是您想要的流的索引号。

在每一行中,例如

demuxer -> ist_index:12 type:video next_dts:10851838034 next_dts_time:10851.8 next_pts:10851705034 next_pts_time:10851.7 pkt_pts:976665480 pkt_pts_time:10851.8 pkt_dts:976665480 pkt_dts_time:10851.8 off:0 off_time:0
对于TS输入,

-pkt_pts除以流时基90000,将为您提供全精度pkt_pts_time。如果您不知道时基,请参阅流的输入转储

Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 768x432, 29.97 tbr, 90k tbn, 59.94 tbc

并使用tbn值。

请注意,您的ffprobe命令会选择第一个视频流,但您的ffmpeg命令会将其保留为ffmpeg以选择流,这些流可能不会选择相同的流。