c++ - ffmpeg::avcodec_encode_video 设置 PTS h264

标签 c++ h.264 video-encoding avcodec

我正在尝试使用 libavcodec 将视频编码为 H264

ffmpeg::avcodec_encode_video(codec,output,size,avframe);

返回一个错误,我没有正确设置 avframe->pts 值。
我尝试将其设置为 0,1、AV_NOPTS_VALUE 和 90khz * framenumber 但仍然出现错误 non-strictly-monotonic PTS

ffmpeg.c 示例使用 ffmpeg::av_rescale_q() 设置 packet.pts,但这仅在您对帧进行编码后调用!

当与 MP4V 编解码器一起使用时,avcodec_encode_video() 会自行正确设置 pts 值。

最佳答案

我遇到了同样的问题,通过在调用 avcodec_encode_video 之前计算 pts 解决了这个问题,如下所示:

//Calculate PTS: (1 / FPS) * sample rate * frame number
//sample rate 90KHz is for h.264 at 30 fps
picture->pts = (1.0 / 30) * 90 * frame_count;
out_size = avcodec_encode_video(c, video_outbuf, video_outbuf_size, picture);

this helpful blog post 窃取的解决方案

(注意:将采样率更改为 khz,以 hz 表示帧之间的时间太长,可能需要使用此值 - 这里不是视频编码专家,只是想要一些有用的东西,而这个确实有用)

关于c++ - ffmpeg::avcodec_encode_video 设置 PTS h264,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603979/

相关文章:

c++ - 当给定字符串时,Cout 从行首开始打印

flash - 在嵌入代码或 AS 中禁用 Adob​​e Flash Player 硬件加速

Android - 在解码视频的同时对其进行编码

ffmpeg - 如何计算在 iPhone 上显示视频的最佳尺寸和比特率?

ffmpeg libx264编码器不同机器不同输出

c++ - 钩子(Hook)过滤 Keyboard KEYS c 中的问题

c++ - 使用 LibVLC 在播放时保存流

c++ - 概念定义的放置如何改变程序行为

iphone - FFmpeg 解码 H264 视频太慢

android - 如何从 H264 流中获取 slice-height 和 stride?