GStreamer-fakesink0:sink)(4096字节,dts:none,pts:none,持续时间:对于filesrc从srt文件读取的第一个文本行,无

GStreamer-fakesink0:sink)(4096字节,dts:none,pts:none,持续时间:对于filesrc从srt文件读取的第一个文本行,无,gstreamer,Gstreamer,为什么在下面的管道中,我在从带有字幕的.srt文件读取文本的开始处并没有时间戳 这对我来说是个问题,因为我想稍后用来自其他src的h264视频对其进行mux,但由于muxer的“缓冲区没有PTS”而失败 GStreamer版本1.14.5 gst-launch-1.0 filesrc do-timestamp=true location=English.srt ! queue ! fakesink silent=false -v Setting pipeline to PAUSED ... P

为什么在下面的管道中,我在从带有字幕的.srt文件读取文本的开始处并没有时间戳

这对我来说是个问题,因为我想稍后用来自其他src的h264视频对其进行mux,但由于muxer的“缓冲区没有PTS”而失败

GStreamer版本1.14.5

gst-launch-1.0 filesrc do-timestamp=true location=English.srt  ! queue ! fakesink silent=false -v
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = event   ******* (fakesink0:sink) E (type: stream-start (10254), GstEventStreamStart, stream-id=(string)a02d40ac74fcf80941cc61947d76a1e054212aa98d213ab8cf403f1634f3abb0, flags=(GstStreamFlags)GST_STREAM_FLAG_NONE, group-id=(uint)1;) 0x563e90b389e0
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = event   ******* (fakesink0:sink) E (type: segment (17934), GstEventSegment, segment=(GstSegment)"GstSegment, flags=(GstSegmentFlags)GST_SEGMENT_FLAG_NONE, rate=(double)1, applied-rate=(double)1, format=(GstFormat)GST_FORMAT_TIME, base=(guint64)0, offset=(guint64)0, start=(guint64)0, stop=(guint64)18446744073709551615, time=(guint64)0, position=(guint64)0, duration=(guint64)18446744073709551615;";) 0x563e90b38a50
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = preroll   ******* 
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: -1, offset_end: 4095, flags: 00000040 discont , meta: none) 0x7f35f0008060
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: -1, offset_end: 4095, flags: 00000000 , meta: none) 0x7f35f0008170
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: -1, offset_end: 4095, flags: 00000000 , meta: none) 0x7f35f0008280
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: none, pts: none, duration: none, offset: -1, offset_end: 4095, flags: 00000000 , meta: none) 0x7f35f0008390
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: 0:00:00.001037500, pts: 0:00:00.001037500, duration: none, offset: -1, offset_end: 4095, flags: 00000000 , meta: none) 0x7f35f00084a0
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: 0:00:00.001103400, pts: 0:00:00.001103400, duration: none, offset: -1, offset_end: 4095, flags: 00000000 , meta: none) 0x7f35f00085b0
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4096 bytes, dts: 0:00:00.001135300, pts: 0:00:00.001135300, duration: none, offset: -1, offset_end: 4095, flags: 00000000 , meta: none) 0x7f35f00086c0
要读取的文件的一部分:

1
00:00:00,900 --> 00:00:37,690
Flesh and sin die.

2
00:00:42,530 --> 00:00:46,410
Die with Christ, that's it.
Rise with Christ.

3
00:00:46,620 --> 00:00:50,660
That's it. Holy Spirit, come.
Holy Spirit come, set her free.

4
00:00:51,120 --> 00:00:53,080
Die with Christ.

您的管道中没有任何逻辑。除了扩展名为
.srt
的文件之外,没有人知道我们在这里处理的是什么类型的数据。您可能需要类似
subparse
的内容

gst-launch-1.0 filesrc do-timestamp=true location=English.srt  ! subparse ! queue ! fakesink silent=false -v

谢谢你的评论。是和否:)多亏了subparse,当解析字幕文件时,我能够得到正确的PTS。但我仍然不知道为什么在最初的管道中,PTS是没有的?在什么情况下会发生这种情况?我当前的管道是:```gst-launch-1.0 filesrc do timestamp=true location=English.srt!应用程序/x-字幕!子屏幕字幕编码=utf8!text/x-raw,格式=(字符串)utf8!fakesink silent=false-vmt```由于某种原因,它的(字符串)pango标记作为子parse的输出失败,即使它的支持格式=(字符串)utf8So子parse在链接到fakesink时应该使用“格式=(字符串)utf8”功能。如果你没有解析器,你只有filesrc和fakesink。你认为在这种情况下会发生什么?GStreamer不知道该做什么,所以它如何知道任何pts?此外,subparse是解析器而不是转换器。因为SubRip包含标记,所以subparse将为您提供一种标记格式。如果你想要原始字符串或任何你想要的东西,你需要把它从标记格式中拉出来<我想来自pango库的code>pango\u parse\u markup()是这方面的一个帮助。元素的上限是可能的输出。这并不意味着所有格式都可用于特定流。与视频解码器类似,视频解码器可能提供多种格式,但流指示实际解码的内容。