在几帧的 H.264 原始流中添加当前时间作为时间戳

Adding current time as timestamp in H.264 raw stream with few frames

我有一个程序可以输出 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 原始帧,其中 "current time" 是 接收 帧的时间,而不是输出它?

注意:问题是不是来自管道的缓冲。

您可以更早地分配时间戳,让 setpts 简单地将其规范化为从 0 开始。

 my-program | ffmpeg -use_wallclock_as_timestamps 1 -i - -filter:v setpts='PTS-STARTPTS' out.mp4

-use_wallclock_as_timestamps是libavformat框架在接收数据包时赋值的