我录制了一个类似于此的流(但我将图像传输到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 ?
答案 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以选择流,这些流可能不会选择相同的流。