我有一个程序会发出H.264原始流(在Android上为screenrecord
)。我正在使用FFmpeg在帧上添加PTS(演示时间戳记),如下所示:
$ my-program | ffmpeg -i - -filter:v setpts='(RTCTIME - RTCSTART) / (TB * 1000000)' out.mp4
此过滤器计算当前时间,并将其作为PTS。
麻烦的是,如果视频没有任何变化,my-program
不会产生任何输出。由于FFmpeg似乎要等待一堆帧才能通过setpts
过滤器,因此计算出的PTS将不正确。特别是,下一个序列开始时,序列的最后一帧将带有时间戳。
是否有一种方法(使用FFmpeg或其他方法)将当前时间作为PTS添加到H.264原始帧中,其中“当前时间”是在接收帧时而不是将其输出?
注:问题是not来自管道的缓冲。
您可以更早地分配时间戳,让setpt只需将其标准化为从0开始。
my-program | ffmpeg -use_wallclock_as_timestamps 1 -i - -filter:v setpts='PTS-STARTPTS' out.mp4
[-use_wallclock_as_timestamps
在接收数据包时由libavformat框架分配。