首页 > 解决方案 > 计算 PTS 和 DTS 以在 ffmpeg 中编码新的视频和音频

问题描述

我在 MP4 文件中编码了一个与音频混合的新 H.264 视频。

如何正确计算视频和音频的 AVPacket 和 AVFrame 的 PTS 和 DTS?

我从我的源生成新的视频帧和新的音频。没有原始的 PTS/DTS 信息。我知道我需要使用的帧速率(time_base)。

标签: audiovideoffmpegmux

解决方案


假设您的帧速率是恒定的。并且在正确设置流时基之后。从零 (0) 开始两个 pts。音频 pts 将增加每帧的“每帧样本”。这通常是audio_sample_rate / frame_rate(即 48000/60 = 800)。

对于视频,情况有所不同,而且有些简单。视频点将增加每帧相同数量的“视频帧持续时间”。使用此备忘单计算持续时间:

FPS     Frame duration
23.98   2002
24.00   2000
25.00   2000
29.97   2002
30.00   2000
50.00   1000
59.94   1001
60.00   1000

是的,这些有点hacky,但会起作用。


推荐阅读