timecodestamper
元素将时间码添加到 GStreamer 管道:
appsrc name=src emit-signals=True format=time
! video/x-raw,format=BGR,width=1920,height=1080,framerate=1/10
--> ! timecodestamper
! videoconvert
! x264enc pass=quant quantizer=0 tune=zerolatency
! h264parse
! mp4mux
! filesink location=output.mp4
但是,我得到了这些断言失败:
gst_video_time_code_add_frames: assertion 'gst_video_time_code_is_valid (tc)' failed
gst_video_time_code_nsec_since_daily_jam: assertion 'gst_video_time_code_is_valid (tc)' failed
据我了解,无需任何额外配置,
timecodestamper
将对每一帧使用递增计数器。
gst_video_time_code_is_valid
在这里定义它检查这些东西:
视频的帧率不是0/x或x/0
各个时间码字段是有意义的,例如,秒字段不是 >= 60。
/* We can't have more frames than rounded up frames per second */
/* We either need a specific X/1001 framerate or otherwise an integer framerate */
/* We only support 30000/1001 and 60000/1001 as drop-frame framerates. 24000/1001 is *not* a drop-frame framerate! */
/* Drop-frame framerates require skipping over the first two timecodes every minutes except for every tenth minute in case of 30000/1001 and the first four timecodes for 60000/1001 */
由于
drop-frame
属性默认为 false,上面的 #5 和 #6 不适用。
帧速率是 1/10,所以 #1 也不适用。我假设除非 GStreamer 中存在错误,#2 不适用。
然而这个条件是有问题的:
} else if (tc->config.fps_n % tc->config.fps_d != 0) {
return FALSE;
}
在这种情况下,我们的帧速率是每 10 秒一帧,但是 1 % 10 != 0.
如果我将帧速率更改为 1,我将不再看到断言。但可能这里的限制是一个错误?